C / C ++:检测调试/发布的便携方式?

时间:2010-02-12 02:21:53

标签: c++ c

是否有标准化(例如由所有主要编译器实现)#define,这将允许我区分调试和发布版本?

3 个答案:

答案 0 :(得分:17)

如果相信

 #ifdef NDEBUG
  // nondebug
 #else
  // debug code
 #endif

是最便携的。

但是没有编译器知道你是在编译调试还是发布,所以这不是自动的。但是这个由assert.h在c-runtime中使用,所以它很常见。 Visual Studio将设置它,我相信大多数其他IDE也会这样。

答案 1 :(得分:3)

由于没有调试或发布的标准定义,因此无法执行此操作。我可以想到至少有四种不同的东西,它们都可以独立改变。只能在代码中测试两个。

  1. 编译器优化级别
  2. 调试二进制中包含的符号(这些符号甚至可以在以后删除)
  3. 启用assert()(未定义NDEBUG)
  4. 日志已关闭

答案 2 :(得分:0)

编辑:我误解了这个问题并且在一个不同的切线上犹豫不决!道歉... 宏_NDEBUG用于Linux以及Windows ...

如果构建了二进制文件并且您需要确定构建是否是发布/调试,则可以获得十六进制转储,如果您看到其中包含大量符号的调试信息...例如,在Linux下,使用strings实用程序。 SysInternals有一个适用于Windows的版本,可在technet上找到。二进制可执行文件的发行版本不会有代表不同符号的字符串...

strings some_binary

希望这有帮助, 最好的祝福, 汤姆。