调试MinGW上的内存损坏
Debugging memory corruption on MinGW
我在一个相当大的项目中遇到了一些内存损坏的问题,以控制一些科学硬件(大约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等工具检查内存管理问题
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在调试 malloc():新内存损坏
- 仅特定内核计数上的 MPI 内存损坏
- C++程序错误:malloc():内存损坏
- 调用std::函数成员时内存损坏
- C++ 内存损坏检测
- 由于标头中的 #define 不匹配而导致内存损坏
- C STD ::线程中的种族状况或内存损坏
- malloc()内存损坏仅通过为特定数量编写int数组
- 字符串标记化期间的内存损坏
- 从检测到 glibc 正常退出 - malloc():内存损坏
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- std :: string ::擦除会导致内存损坏
- 编译器如何检测内存损坏
- mix_playMusic导致内存损坏
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 两个内联程序集调用与一个内联程序集调用中的内存损坏?
- 如何调试不确定内存损坏?
- 增强Dijkstra代码会导致片段内存损坏
- 内存损坏从vb.net调用c dll