在发布中抛出断言但不是调试 - 一定是编译器错误?
Posted
技术标签:
【中文标题】在发布中抛出断言但不是调试 - 一定是编译器错误?【英文标题】:Assertion thrown in Release but not debug - necessarily a compiler bug? 【发布时间】:2016-11-25 09:02:59 【问题描述】:这不是关于我的代码的具体问题,而是更高级的问题。
我有在发布和调试模式下编译的 C++ 代码(都打开了断言)
库中没有检查调试等的代码(通过 prerocsssor 定义或宏)。
在调试模式下运行不会导致任何断言。在 Release 或 RelWithDebInfo 中运行每次都会抛出一个断言。
这是否一定意味着 MSVC 编译器/优化器中存在错误?此外,更一般地说:Release 和 Debug 之间的程序行为差异是否总是构成编译器中的错误。
注意:clang 可以很好地运行此代码,而不会在 Release 和 Debug 中抛出断言。
【问题讨论】:
没有例子很难说,这可能是与未初始化的变量有关的问题。或完全不同的东西。您是否使用 Visual Studio 中设置的最高警告级别编译代码? 如果您在调试器中运行 RelWithDebInfo(可能因为您有调试信息),断言在哪里发生?使用某些编译器或构建配置使某些工作正常工作,但在其他情况下却不行,这通常更多地表明您做了导致未定义行为的事情,而不是编译器或库中的错误。 【参考方案1】:这种事情几乎从来都不是编译器错误。如果您的代码因为杂散指针而覆盖数据,当您使用不同的选项进行编译时,它可能会覆盖不同的数据,从而产生截然不同的结果。
【讨论】:
以上是关于在发布中抛出断言但不是调试 - 一定是编译器错误?的主要内容,如果未能解决你的问题,请参考以下文章
http.put 在使用 Chrome 但不是 IE 的 Angular 2 / Web API 中抛出错误
Solidity 编译器在代码中抛出 DeclarationError
为啥“”.abcd 返回未定义的值而不是在 Javascript 中抛出未定义的错误(但 Typescript 抛出警告)
加载视图时,ASP.NET MVC 在控制台(浏览器开发工具)中抛出错误“jQuery tDatePicker 不是函数”