2011-05-28 88 views
3

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

+0

你尝试 “重建所有”? – 2011-05-28 16:44:26

+0

调试和发布之间的断言消息有任何区别吗? – 2011-05-28 16:56:28

+0

单个或多个模块输出? – 2011-05-28 16:56:55

回答

2

检查您正在定义的预处理器符号。调试版本通常会定义_DEBUG,发布版本通常会定义NDEBUG。当定义NDEBUG时,断言通常会被关闭。

+0

NDEBUG设置和_DEBUG不是 – jeffythedragonslayer 2011-05-28 16:51:44

+0

好吧,这很有趣:在主项目中,具有WinMain(),NDEBUG定义和_DEBUG不是。但是对于所有其他项目,即使它们设置为发布模式,情况正好相反。 – jeffythedragonslayer 2011-05-28 17:03:34

+0

好的。所以我现在已经把所有的文件合并到一个项目中,并且它似乎解决了这个问题。仍然不知道为什么每个项目的调试符号都不同。 – jeffythedragonslayer 2011-05-29 04:53:26

0

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

马丁

相关问题