CHECK宏支持自定义错误提示

This commit is contained in:
ziyue 2021-10-16 16:24:40 +08:00
parent 11eb04f094
commit b10fc52384
4 changed files with 55 additions and 18 deletions

View File

@ -21,12 +21,12 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #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 #ifdef __cplusplus
} }
#endif #endif
#define assert(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__) #define assert(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, NULL)
#else #else
#define assert(e) ((void)0) #define assert(e) ((void)0)
#endif//NDEBUG #endif//NDEBUG

View File

@ -307,22 +307,10 @@ const string kMediaTimeoutMS = "media_timeout_ms";
const string kBeatIntervalMS = "beat_interval_ms"; const string kBeatIntervalMS = "beat_interval_ms";
const string kMaxAnalysisMS = "max_analysis_ms"; const string kMaxAnalysisMS = "max_analysis_ms";
const string kBenchmarkMode = "benchmark_mode"; const string kBenchmarkMode = "benchmark_mode";
} }
} // namespace mediakit } // 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 #ifdef ENABLE_MEM_DEBUG
static atomic<uint64_t> mem_usage(0); static atomic<uint64_t> mem_usage(0);

View File

@ -9,11 +9,32 @@
*/ */
#include "macros.h" #include "macros.h"
#include "Util/util.h"
using namespace toolkit;
#if defined(ENABLE_VERSION) #if defined(ENABLE_VERSION)
#include "Version.h" #include "Version.h"
#endif #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协议勿修改服务器声明 //请遵循MIT协议勿修改服务器声明
#if !defined(ENABLE_VERSION) #if !defined(ENABLE_VERSION)
const char SERVER_NAME[] = "ZLMediaKit-6.0(build in " __DATE__ " " __TIME__ ")"; 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__ ")"; const char SERVER_NAME[] = "ZLMediaKit(git hash:" COMMIT_HASH ",branch:" BRANCH_NAME ",build time:" __DATE__ " " __TIME__ ")";
#endif #endif
}//namespace mediakit

View File

@ -11,6 +11,8 @@
#ifndef ZLMEDIAKIT_MACROS_H #ifndef ZLMEDIAKIT_MACROS_H
#define ZLMEDIAKIT_MACROS_H #define ZLMEDIAKIT_MACROS_H
#include <iostream>
#include <sstream>
#if defined(__MACH__) #if defined(__MACH__)
#include <arpa/inet.h> #include <arpa/inet.h>
#include <machine/endian.h> #include <machine/endian.h>
@ -38,7 +40,7 @@
#endif #endif
#ifndef CHECK #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 #endif//CHECK
#ifndef MAX #ifndef MAX
@ -62,14 +64,39 @@
#define FMP4_SCHEMA "fmp4" #define FMP4_SCHEMA "fmp4"
#define DEFAULT_VHOST "__defaultVhost__" #define DEFAULT_VHOST "__defaultVhost__"
extern const char SERVER_NAME[];
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #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 #ifdef __cplusplus
} }
#endif #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 #endif //ZLMEDIAKIT_MACROS_H