可能重复:
有时我遇到这样奇怪的情况,程序在正常运行时运行不正确,它会弹出终止对话框,但在调试时正确。当我想使用调试器查找代码中的错误时,这确实让我感到沮丧。
你有没有遇到过这种情况,为什么?
更新:
_为了证明有逻辑原因会导致这种令人沮丧的情况_:
我认为一个很大的可能性是堆访问volidation。我曾经写过一个分配一个小缓冲区的函数,但后来我走出了边界。它将在 gdb、cdb 等中正确运行(我不知道为什么,但它确实运行正确);但在正常运行时异常终止。
我正在使用 C++。
我不认为我的问题与上述问题重复。
那是发布模式和调试模式之间的比较,但我的是调试和非调试之间的比较,其中有一个词 heisenbug ,正如许多其他人指出的那样。
谢谢。
原文由 Jichao 发布,翻译遵循 CC BY-SA 4.0 许可协议
你有一个 heisenbug 。
调试器可能正在初始化值
一些环境将变量和/或内存初始化为已知值,例如在调试版本中为零,但不是在发布版本中。
发布可能是通过优化构建的
现代编译器很好,但 假设 优化代码的功能与非优化代码不同。 编辑:如今,编译器错误 _很少见_。如果您发现自己认为自己有一个,请先用尽所有其他想法。
heisenbugs 可能还有其他原因。