【问题标题】:Assertions not compiled out of release build断言不是从发布版本编译出来的
【发布时间】:2011-05-28 16:39:44
【问题描述】:

我已经告诉 VC++ 在发布模式下编译我的程序,但 assert() 语句仍然会触发。我认为断言应该从发布版本中编译出来以提高性能。这是怎么回事?我是否需要设置其他一些设置来跳过编译它们?

【问题讨论】:

  • debug和release的assert消息有区别吗?
  • 单模块输出还是多模块输出?
  • 我已尝试全部重建,但没有成功。它是多个模块。
  • 两种模式的断言失败消息完全相同

标签: visual-c++ release assertion


【解决方案1】:

检查您定义的预处理器符号。 Debug 版本通常会定义 _DEBUG,而 Release 版本通常会定义 NDEBUG。定义 NDEBUG 时,断言通常会被关闭。

【讨论】:

  • NDEBUG 已设置,_DEBUG 未设置
  • 好吧,这很有趣:在主项目中,有 WinMain() 的那个,定义了 NDEBUG 而没有定义_DEBUG。但对于所有其他项目,情况恰恰相反,即使它们设置为发布模式。
  • 好的。所以我现在已经将所有文件合并到一个项目中,它似乎解决了这个问题。仍然不知道为什么每个项目的调试符号都不同。
【解决方案2】:

在调试器下打开应用。断言对话框启动时执行调试->中断。查看断言触发的源文件。现在查看该文件的构建设置。如果设置看起来正确并且您正在加载发布版本,请在编译器命令行上设置 /P 和 /d1PP 以显示错误的 #define 来自何处。

马丁

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多