c++ - 有没有比 #if DebugMode 更好的日志记录方法

标签 c++ logging debugging

我正在制作一个将从 C# 进行 P/调用的 C++ 库,因此我无法断点/调试事物的 C++ 端。所以我决定添加日志记录,这样我就可以查看是否有任何问题以及发生的地方。我添加了一个 #define DebugMode 1 以确定我是否要登录。 首先,我不太擅长 C++,但我知道的足够多了。所以我的问题是:

  1. 有没有比在每个 Log 调用周围包装 #if DebugMode #endif 更好的方法?我可以简单地在 Log 方法中执行此操作,如果未启用日志记录则返回,但这是否意味着所有这些日志记录字符串都将在程序集中?

  2. 我如何模拟 printf 使用其“...”运算符执行的操作,使我能够传递类似 Log("Variable x is {0}", x);

  3. 有什么技巧可以在日志中使用,例如获取行号或某种堆栈跟踪信息吗?

谢谢!

最佳答案

一种简单的方法是只定义一个宏,如果您不处于 Debug模式,它什么也不做。这样您就不必将每个调用都包装在 #ifdef 中。

一个简单的实现可能是:

#if DebugMode
#define MY_LOG(string, ...) printf(string, __VA_ARGS__)
#else
#define MY_LOG(string, ...)
#endif

还有其他方法和库(例如 boost),但这会让您很快得到一些东西。

关于c++ - 有没有比 #if DebugMode 更好的日志记录方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2642809/

相关文章:

c++ - 通过引入不相关的调用运算符奇怪地解决了模棱两可的调用运算符重载 - clang vs gcc

linux - 关于在 IA32 的 NASM 程序集中逐字符解析字符串的调试代码

c++ - 类名变量(arg1)之间的区别;和 ClassName 变量 = ClassName (arg1);

c++ - 源不兼容是否总是意味着二进制不兼容?

c++ - 与多个类共享一个对象

sql - DBMS查询日志,可能吗?

logging - 我可以使用 Jenkins 日志解析器隐藏控制台行吗

python - Python 的默认日志格式化程序是什么?

eclipse :Edit the source and continue debugging

java - 在 Eclipse Debugger 中,获取嵌入列表层次结构中变量的索引位置