繁体   English   中英

调试优化的版本会导致程序的行为有所不同吗?

[英]Can debugging an optimized build cause a program to behave differently?

我正在为应用程序开发插件。 由于SDK的古怪之处,我只能将我的插件构建为Release版本。

在处理代码的特定部分时,我发现了奇怪的行为。 在调试器中逐步进行调试时,我发现似乎是堆损坏以及SDK函数中的访问冲突,但是代码似乎没有任何问题。 代码在调试器外部运行良好。

最重要的是,如果我关闭优化,则可以顺利进行。

我知道我不应该调试优化的代码,但是一直认为这是因为编译器执行了内联函数,展开或删除冗余循环以及优化了局部变量之类的事情。 调试器将减少对正在发生的事情的可见性,但是它不会破坏任何内容。

这使我担心关闭优化只是隐藏了一个错误。 所以我的问题是, 我应该期望像调试版本那样逐步进行优化,还是应该让调试器破坏它?

好吧,有两个问题:

  1. 关闭优化会隐藏错误吗?
  2. 使用调试器会破坏事情吗?

有时两者的答案都是。

对构建选项的任何更改都可能隐藏暴露一组不​​同的错误,以及更改它们的表达方式。

Dito用于更改程序运行的环境,而“在调试器下”则是完全不同的环境。
这尤其会影响竞态条件,而竞态条件很难使用调试器进行诊断。
参见heisenbug

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM