【问题标题】:Same C++ code compiled on the same machine behaves differently在同一台机器上编译的相同 C++ 代码表现不同
【发布时间】:2013-02-17 00:59:12
【问题描述】:

我编写了一个使用一些 Qt 静态库的 C++ 代码。 我使用 MSVS2010(在 Windows 7 上)编译代码,然后在第二台机器上运行创建的 .exe-file。

我在同一台机器上编译了完全相同的代码 2 次不同的时间,当第二台机器的 (Windows XP) 屏幕保护程序启动时,生成的 .exe 代码在第二台机器上崩溃,我再次编译了相同的代码(代码或编译器或其设置没有任何变化)并且生成的.exe-file 工作正常。

有人知道是什么原因造成的吗?

有没有办法调试这个问题? 在不同时间可能打开不同的其他程序这一事实是否会影响编译?

【问题讨论】:

  • 它几乎可以是任何东西。我建议像调试任何其他崩溃情况一样调试崩溃。
  • 没有看到代码几乎不可能告诉...
  • @Oil Charlesworth 我是这方面的初学者,最好的调试方法是什么?如果我在调试模式下运行代码,当它崩溃时它会给我任何信息吗?
  • @TJ1:如果你在调试器中运行代码,是的,它应该停在导致崩溃的那一行,允许你检查变量等。
  • 我猜我会说这是堆损坏。崩溃可以重现吗?你能把代码减少到导致崩溃的最简单的版本吗?你有可以检查内存泄漏的工具吗?

标签: c++ qt dll crash


【解决方案1】:

问题在于编译过程(只要您没有更改源代码,它总是会生成相同的二进制文件),而是在于执行环境。

您的第二台机器上似乎有什么东西使您的程序间歇性崩溃(或者很可能与第二台机器无关,并且您的程序到处都间歇性崩溃)。要调试它,您可能最终不得不在第二台机器上安装调试环境并希望问题再次出现,或者您也可以尝试在您的开发机器上重现崩溃。

【讨论】:

  • 问题是我无法在第二台机器上安装任何调试环境。
  • @TJ1:所以你真正的问题是,“我如何在没有调试器的机器上调试某些东西?”。除了“不要尝试不可能的问题”之外,您不太可能得到太多答案。
  • @IraBaxter 我可以在我有调试功能的机器上调试我的代码以防可能的内存泄漏吗?我已经安装了 Visual Leak Detector 并得到了一些结果,但无法解释它们。你能帮我吗?谢谢。
  • SO 的风格建议您应该开始另一个问题以获得帮助。 (不,我没有 Visual Leak Detector 的技能)。
  • @IraBaxter 谢谢,我根据您在stackoverflow.com/questions/15178857/using-visual-leak-detector的建议提出了另一个问题
猜你喜欢
  • 2010-11-28
  • 2011-03-04
  • 1970-01-01
  • 2023-04-06
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多