是否有跨平台的方法来检测 Debug模式编译?如果没有,那么顶级编译器如何做; MSVC、GNU 和 MINGW、mac、clang、intel。
例如 MSVC,您可以像下面这样检测 Debug模式。
#if defined _DEBUG
// debug related stuff here
#else
// release related stuff here
#endif
最佳答案
对于许多或大多数编译器来说,“调试”模式是一个多方面的概念,包括几个正交设置。例如,对于 gcc
,您可以使用 -g
将调试符号添加到输出代码,使用 -O
启用优化,或禁用 assert()
宏使用 -DNDEBUG
(定义 NDEBUG
宏)。在我的工作中,我们已经部署了启用或禁用这些功能的许多组合的生产代码。我们保留了 -g
以便附加到正在运行的进程并使用 gdb
对其进行故障排除(在这种情况下我们通常不得不与意大利面条 -O
produced),保留断言以获取有关跨版本持续性错误的更多信息,并禁用对根据更宽松的“未定义行为”解释编写的遗留代码库的优化(直到我们可以修复/替换它)。
由于 NDEBUG
宏实际上会影响生成代码的语义(并且某些库会在定义或未定义宏时更改其 ABI),这可能是对您的问题最便携的答案。但是,如果您使用该宏来检测可移植的优化构建,您可能会取得不同程度的成功。
关于c++ - 有没有跨平台的方法来检测 Debug模式编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508954/