调试MinGW上的内存损坏

Debugging memory corruption on MinGW

本文关键字:内存 损坏 MinGW 调试      更新时间:2023-10-16

我在一个相当大的项目中遇到了一些内存损坏的问题,以控制一些科学硬件(大约6000行),我不确定哪是解决问题的最佳方法/工具。该项目使用Qt 4.8,并使用QtCreator和MinGW构建。这个程序或多或少还能用,但我有一些稳定性问题。有时我遇到随机崩溃,但在某些情况下,当我稍微更改源代码时,程序将在完全相同的位置崩溃(以前工作过的位置)。它这次选择的位置看起来像这样:

 char stages2[1024];
 sprintf(stages2, "M-511.DD.LOADnNOSTAGE");

第二行给出了一个分段错误(SIGSEGV),当我在gdb中运行它时,这告诉我我在程序的内存中有某种问题,因为我确信这两行是正确的。此外,"崩溃地点"的变化取决于确切的源代码;我甚至见过Qt使用的Windows dll崩溃。

我已经研究了几种方法来找到问题的原因,但是我遇到了一些困难:

  • 我已经下载了DUMA,但是我只是不能让它在MinGW上编译——我不得不改变一个包含命令来制作这个库,但是现在一个测试程序失败了。(任何提示或链接到二进制文件,任何人?)
  • 我也尝试过应用程序验证程序,但是当我运行它时,它总是停在同一位置,我使用的第三方DLL正在泄漏句柄。我有理由相信这不是我的问题的原因,但我不能继续调试过程,因为gdb总是回到相同的位置(它只在我使用应用程序验证器时被卡在那里)。
  • 最后,我用Dr. Memory运行了我的程序,但它在到达主窗口之前就崩溃了,没有给我任何有用的输出(我唯一看到的是Qt显然浪费了一些内存)。
如果你能给我一些建议,告诉我什么方法最有希望最终消除这个错误,我将非常感激。

使用优化和-Wall(可能还有其他警告标志)编译,检查所有警告,以确保没有任何可疑的事情发生。

使用valgrind等工具检查内存管理问题