![](/img/trans.png)
[英]What might cause OpenGL to behave differently under the “Start Debugging” versus “Start without debugging” options?
[英]Can debugging an optimized build cause a program to behave differently?
我正在为应用程序开发插件。 由于SDK的古怪之处,我只能将我的插件构建为Release版本。
在处理代码的特定部分时,我发现了奇怪的行为。 在调试器中逐步进行调试时,我发现似乎是堆损坏以及SDK函数中的访问冲突,但是代码似乎没有任何问题。 代码在调试器外部运行良好。
最重要的是,如果我关闭优化,则可以顺利进行。
我知道我不应该调试优化的代码,但是一直认为这是因为编译器执行了内联函数,展开或删除冗余循环以及优化了局部变量之类的事情。 调试器将减少对正在发生的事情的可见性,但是它不会破坏任何内容。
这使我担心关闭优化只是隐藏了一个错误。 所以我的问题是, 我应该期望像调试版本那样逐步进行优化,还是应该让调试器破坏它?
好吧,有两个问题:
有时两者的答案都是。
对构建选项的任何更改都可能隐藏和暴露一组不同的错误,以及更改它们的表达方式。
Dito用于更改程序运行的环境,而“在调试器下”则是完全不同的环境。
这尤其会影响竞态条件,而竞态条件很难使用调试器进行诊断。
参见heisenbug 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.