断言未从发布版本中编译出来

发布于 2024-11-10 09:47:13 字数 98 浏览 3 评论 0原文

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

I've told VC++ to compile my program in release mode, yet the assert() statements still fire. I thought assertions were supposed to be compiled out of release builds for performance. What's going on? Is there some other setting I need to set skip compiling them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

此刻的回忆 2024-11-17 09:47:13

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

Check which preprocessor symbold you're defining. A Debug build would normally define _DEBUG, and a Release build would normally define NDEBUG. Assertions would normally be switched off when NDEBUG is defined.

薔薇婲 2024-11-17 09:47:13

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

马丁

Open the app under the debugger. Do debug->break when the assertion dialog is up. Look at the source file where the assert is firing. Now look at the build settings of that file. If the settings seem right and you are loading the release version, set /P and /d1PP on the compiler command line to reveal where the errant #define is coming from.

Martyn

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文