Commit b10fc523 by ziyue

CHECK宏支持自定义错误提示

parent 11eb04f0
......@@ -21,12 +21,12 @@
#ifdef __cplusplus
extern "C" {
#endif
extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line);
extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line, const char *str);
#ifdef __cplusplus
}
#endif
#define assert(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__)
#define assert(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, NULL)
#else
#define assert(e) ((void)0)
#endif//NDEBUG
......
......@@ -307,22 +307,10 @@ const string kMediaTimeoutMS = "media_timeout_ms";
const string kBeatIntervalMS = "beat_interval_ms";
const string kMaxAnalysisMS = "max_analysis_ms";
const string kBenchmarkMode = "benchmark_mode";
}
} // namespace mediakit
extern "C" {
void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line) {
if (failed) {
_StrPrinter printer;
printer << "Assertion failed: (" << exp << "), function " << func << ", file " << file << ", line " << line
<< ".";
throw std::runtime_error(printer);
}
}
}
#ifdef ENABLE_MEM_DEBUG
static atomic<uint64_t> mem_usage(0);
......
......@@ -9,11 +9,32 @@
*/
#include "macros.h"
#include "Util/util.h"
using namespace toolkit;
#if defined(ENABLE_VERSION)
#include "Version.h"
#endif
extern "C" {
void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line, const char *str) {
if (failed) {
_StrPrinter printer;
printer << "Assertion failed: (" << exp ;
if(str && *str){
printer << ", " << str;
}
printer << "), function " << func << ", file " << file << ", line " << line << ".";
throw std::runtime_error(printer);
}
}
}
namespace mediakit {
void printArgs(std::ostream &out) {}
//请遵循MIT协议,勿修改服务器声明
#if !defined(ENABLE_VERSION)
const char SERVER_NAME[] = "ZLMediaKit-6.0(build in " __DATE__ " " __TIME__ ")";
......@@ -21,3 +42,4 @@ const char SERVER_NAME[] = "ZLMediaKit-6.0(build in " __DATE__ " " __TIME__ ")"
const char SERVER_NAME[] = "ZLMediaKit(git hash:" COMMIT_HASH ",branch:" BRANCH_NAME ",build time:" __DATE__ " " __TIME__ ")";
#endif
}//namespace mediakit
\ No newline at end of file
......@@ -11,6 +11,8 @@
#ifndef ZLMEDIAKIT_MACROS_H
#define ZLMEDIAKIT_MACROS_H
#include <iostream>
#include <sstream>
#if defined(__MACH__)
#include <arpa/inet.h>
#include <machine/endian.h>
......@@ -38,7 +40,7 @@
#endif
#ifndef CHECK
#define CHECK(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__)
#define CHECK(exp,...) mediakit::Assert_ThrowCpp(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
#endif//CHECK
#ifndef MAX
......@@ -62,14 +64,39 @@
#define FMP4_SCHEMA "fmp4"
#define DEFAULT_VHOST "__defaultVhost__"
extern const char SERVER_NAME[];
#ifdef __cplusplus
extern "C" {
#endif
extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line);
extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line, const char *str);
#ifdef __cplusplus
}
#endif
namespace mediakit {
extern const char SERVER_NAME[];
void printArgs(std::ostream &out);
template<typename First>
void printArgs(std::ostream &out, First &&first) {
out << std::forward<First>(first);
}
template<typename First, typename ...ARGS>
void printArgs(std::ostream &out, First &&first, ARGS &&...args) {
out << std::forward<First>(first);
printArgs(out, std::forward<ARGS>(args)...);
}
template<typename ...ARGS>
void Assert_ThrowCpp(int failed, const char *exp, const char *func, const char *file, int line, ARGS &&...args) {
if (failed) {
std::stringstream ss;
printArgs(ss, std::forward<ARGS>(args)...);
Assert_Throw(failed, exp, func, file, line, ss.str().data());
}
}
}//namespace mediakit
#endif //ZLMEDIAKIT_MACROS_H
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论