C / C ++:检测调试/发布的便携方式?
是否有标准化(例如由所有主要编译器实现)#define,这将允许我区分调试和发布版本?
如果相信
#ifdef NDEBUG // nondebug #else // debug code #endif
是最便携的。
但是没有编译器知道你是在编译调试还是发布,所以这不是自动的。 但是这个由assert.h在c-runtime中使用,所以它很常见。 Visual Studio将设置它,我相信大多数其他IDE也会。
由于没有调试或发布的标准定义,因此无法实现此目的。 我可以想到至少有四种不同的东西,它们都可以独立改变。 只能在代码中测试两个。
- 编译器优化级别
- 调试二进制中包含的符号(甚至可以在以后删除它们)
- assert()已启用(未定义NDEBUG)
- 记录关闭
编辑:我误读了这个问题,并在另一个切线上胡扯! 道歉……宏_NDEBUG用于Linux以及Windows …
如果构建了二进制文件并且您需要确定构建是否是发布/调试,那么您可以获得hex转储,如果您看到其中包含大量符号的调试信息…例如,在Linux下,使用字符串效用。 SysInternals有一个适用于Windows的版本,可在technet上找到 。 二进制可执行文件的发行版本不会有代表不同符号的字符串……
字符串some_binary
希望这会有所帮助,最好的问候,汤姆。