C ++ / VS 2010:只有在没有调试器的情况下运行时才会发生错误

时间:2011-08-18 18:41:20

标签: c++ visual-studio debugging

这是一个扭曲的问题。当我在Visual Studio中使用F5运行我的程序时,一切正常。如果我在没有调试器的情况下启动它,或者从VS外部启动它,会发现一些我无法找到的令人讨厌的错误。

我怀疑这是由调试器随机化所有未初始化的变量引起的,在“外部”之后,它们被设置为0.我必须使用变量而不在某处启动它...

  • 还有其他可能的解释吗?
  • 我该怎么做才能找到错误 - 我不能使用调试器
  • 为什么VS中的调试器没有检测到使用了一个整数变量,如果是这样的话

2 个答案:

答案 0 :(得分:4)

正如汉斯帕斯特所说,你有错误的方法。在Debug中,内存已初始化,但在发布时它可能是任何内容。

一般情况下,如果您在发布中出现了一些在调试中没有发生的问题,那么可能会涉及到以下几点:

  1. 如你所说,依赖未初始化的变量。
  2. 更改代码语义的优化。只有在编写依赖于错误定义的行为的代码时才会发生这种情况。例如,假设函数参数按特定顺序计算,或依赖于有符号整数溢出或任意数量的事物。
  3. 这是一个时间问题,由于性能更好,在发布版本中更频繁地出现。这些最常出现在多线程应用程序中。
  4. 您在调试和发布中使用不同的库,并依赖它们之间的不同行为。
  5. 您可以使用调试器附加到正在运行的程序。我认为它位于VS的“调试”菜单中,称为“附加到进程...”。确保为发布版本生成调试符号,以便获得可用的调用堆栈。

答案 1 :(得分:0)

我最近遇到了类似的问题,除了它甚至更奇怪。当我在visual studio中运行发布时,代码运行正常,但是当我在visual studio外部运行程序时(只需单击.exe),它就会发生这个非常大的错误。

原来是因为:

angle = MathHelper.ToRadians(angle);

当角度为0时,它将失败并产生一些奇怪的结果。 我只需将其修改为:

即可修复它
angle = MathHelper.ToRadians(angle+.01f);

对于这么小的东西来说非常烦人的问题。希望这有助于其他人发现类似的错误。