调试MinGW上的内存损坏

时间:2014-03-10 19:23:08

标签: c++ debugging mingw application-verifier dr-memory

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

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

当我在gdb中运行它时,第二行给出了分段错误(SIGSEGV) - 这告诉我程序的内存存在某种问题,因为我确定这两行是正确的。此外,“崩溃站点”根据确切的源代码而变化;我甚至看到过Qt正在使用的Windows DLL中的崩溃。

我已经研究了几个选项来找出问题的原因,但我遇到了一些困难:

  • 我已经下载了DUMA,但我无法在MinGW上编译它 - 我必须更改include命令才能创建库,但现在其中一个测试程序失败了。 (任何提示或链接到二进制文件,任何人?)
  • 我也尝试了应用程序验证程序,但是当我运行它时,它总是停在相同的位置,我正在使用的第三方DLL正在泄漏句柄。我有理由相信这不是我的问题的原因,但是我无法继续调试过程,因为gdb总是回到相同的位置(当我使用Application verifier时它只会卡在那里)。
  • 最后,我用Dr. Memory运行我的程序,但它只是在到达主窗口之前崩溃,没有给我任何有用的输出(我唯一看到的是Qt显然在浪费一些内存)。

对于最终摆脱这个错误的最有希望的方法,我真的很感激。

1 个答案:

答案 0 :(得分:0)

使用优化和-Wall(以及可能的其他警告标志)进行编译,检查所有警告,确保没有任何可疑之处。

使用像valgrind这样的工具来检查内存管理问题。