C++/VS 2010 : Bug(s) occur only when running without a debugger

标签 c++ visual-studio debugging

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

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

  • 还有其他可能的解释吗?
  • 我应该怎么做才能找到错误 - 我无法使用调试器,可以吗
  • 如果是这样的话,为什么 VS 中的调试器没有检测到未初始化变量的使用

最佳答案

正如汉斯·帕桑特所说,你搞错了方向。在调试中,内存被初始化,但在发布中它可以是任何东西。

一般来说,如果您在发布过程中出现了一些在调试中没有发生的问题,那么可能有以下几个原因:

  1. 正如您所说,依赖未初始化的变量。
  2. 优化改变代码的语义。仅当您编写的代码依赖于不明确的行为时才会发生这种情况。例如,假设函数参数按特定顺序求值,或依赖于有符号整数溢出,或任意数量的情况。
  3. 由于性能更好,这是一个计时问题,在发布版本中更频繁地出现。这些最常发生在多线程应用程序中。
  4. 您在调试和发布中使用不同的库,并依赖它们之间的不同行为。

您可以使用调试器附加到正在运行的程序。我认为它位于 VS 的“调试”菜单中,名为“附加到进程...”。确保为发布版本生成调试符号,以便获得可用的调用堆栈。

关于C++/VS 2010 : Bug(s) occur only when running without a debugger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112436/

相关文章:

c++ - 如何将 cin 读入 vector

c++ - 甚至在 C++ 中执行空循环吗?

c++ - 没有调用未解析的重载函数类型的匹配函数

Microsoft Visual Studio 中的 JavaScript

visual-studio - “The visual Studio component cache is out of date, please restart Visual Studio.”

asp.net - 导出到excel丢失日期格式

c - 如何在 CLion 中设置断点条件

c++ - 为什么这只是一个空白的输出文件

ios - 将调试器附加到从推送通知冷启动的应用程序

python - PyCharm 调试变量 View : disabling variable address