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

Jic*_*hao 14 c++ debugging

可能重复:
调试模式中不存在发布版本中的错误的常见原因

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

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

更新:

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

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

我正在使用C++.

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

那个是发布模式和调试模式之间的比较,但我的是在调试和不调试之间,它有一个单词heisenbug,正如许多其他人所指出的那样.

谢谢.

Jef*_*ffH 23

你有一个heisenbug.

调试器可能正在初始化值

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

可以使用优化构建版本

现代编译器很好,但可以假设优化代码的功能与非优化代码不同.编辑:这些天,编译器错误很少见.如果你发现自己认为自己有一个,那么首先要用尽所有其他想法.

heisenbugs还有其他原因.

  • +1链接到Heisenbug (2认同)

jld*_*ont 2

当使用调试器时,有时内存会被初始化(例如清零),而如果没有调试会话,内存可能是随机的。这可以解释您所看到的行为。