这是一个扭曲的问题。当我在 Visual Studio 中使用 F5 运行程序时,一切正常。如果我在没有调试器的情况下启动它,或者从外部 VS 启动它,则会出现一些我无法找到的令人讨厌的错误。
我怀疑这是由调试器随机化所有未初始化的变量引起的,而在“外部”,它们被设置为 0。我必须使用一个变量而不在某处初始化它......
- 还有其他可能的解释吗?
- 我应该怎么做才能找到错误 - 我无法使用调试器,可以吗
- 如果是这样的话,为什么 VS 中的调试器没有检测到未初始化变量的使用
最佳答案
正如汉斯·帕桑特所说,你搞错了方向。在调试中,内存被初始化,但在发布中它可以是任何东西。
一般来说,如果您在发布过程中出现了一些在调试中没有发生的问题,那么可能有以下几个原因:
- 正如您所说,依赖未初始化的变量。
- 优化改变代码的语义。仅当您编写的代码依赖于不明确的行为时才会发生这种情况。例如,假设函数参数按特定顺序求值,或依赖于有符号整数溢出,或任意数量的情况。
- 由于性能更好,这是一个计时问题,在发布版本中更频繁地出现。这些最常发生在多线程应用程序中。
- 您在调试和发布中使用不同的库,并依赖它们之间的不同行为。
您可以使用调试器附加到正在运行的程序。我认为它位于 VS 的“调试”菜单中,名为“附加到进程...”。确保为发布版本生成调试符号,以便获得可用的调用堆栈。
关于C++/VS 2010 : Bug(s) occur only when running without a debugger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112436/