当程序在调试时正确运行但不是?

新手上路,请多包涵

可能重复:

发布版本中的错误的常见原因在调试模式下不存在

有时我遇到这样奇怪的情况,程序在正常运行时运行不正确,它会弹出终止对话框,但在调试时正确。当我想使用调试器查找代码中的错误时,这确实让我感到沮丧。

你有没有遇到过这种情况,为什么?

更新

_为了证明有逻辑原因会导致这种令人沮丧的情况_:

我认为一个很大的可能性是堆访问volidation。我曾经写过一个分配一个小缓冲区的函数,但后来我走出了边界。它将在 gdb、cdb 等中正确运行(我不知道为什么,但它确实运行正确);但在正常运行时异常终止。

我正在使用 C++。

我不认为我的问题与上述问题重复。

那是发布模式和调试模式之间的比较,但我的是调试和非调试之间的比较,其中有一个词 heisenbug ,正如许多其他人指出的那样。

谢谢。

原文由 Jichao 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 493
1 个回答

你有一个 heisenbug

调试器可能正在初始化值

一些环境将变量和/或内存初始化为已知值,例如在调试版本中为零,但不是在发布版本中。

发布可能是通过优化构建的

现代编译器很好,但 假设 优化代码的功能与非优化代码不同。 编辑:如今,编译器错误 _很少见_。如果您发现自己认为自己有一个,请先用尽所有其他想法。

heisenbugs 可能还有其他原因。

原文由 JeffH 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题