2012-09-27 32 views
0

我想调试一个C++自定义类,涉及分配给我编写的堆并在Cygwin GCC/G ++中编译的内存。如果我运行我的测试程序,它不会明确地给我一个段错误,但在程序结束时,它会显示“中止(核心转储)”。我也似乎无法编写一个测试程序,它会给我一个我可以用Cygwin GDB找到的段错误。因此,我正在寻找一个内存调试器,希望它会有所帮助。用Cygwin GCC编译的C++程序是否有免费的内存调试器?

我运行Windows,我没有Visual Studio,我不想尝试弄清楚如何在另一个命令提示符下编译我的程序,用于Dr. Memory等调试器。

我可以使用哪种内存调试器?

我会编辑,如果我需要添加的东西。

回答

1

您也可以使用memwatch(C语言的内存调试器,它支持C++)。

http://www.linkdata.se/sourcecode/memwatch/

编辑:使用MEMWATCH,您只需:

  1. 把两个文件(memwatch.h和memwatch.c或memwatch.cpp)到同一目录中的源代码你想编译和测试。

  2. 在源代码中的各个.c或.cpp文件,你把在上面这三条线:

    #include "memwatch.h" 
    #define MW_STDIO 
    #define MEMWATCH 
    
  3. 编译并运行程序,它会导致你的程序失败(而大声),当你试图跟随一个未初始化的指针,并且如果程序成功完成,它会写入一个名为memwatch.log的文件,其中包含源代码中的任何内存泄漏 - 以及每个被违犯的行内存分配在代码中

注意:这是你在C中的做法(我假设它与C++相同)。

你知道你有一个未初始化的指针,如果当你打印出来的指针,它等于像0xFEFEFEFEFEFEFEFE一些值(我花了几个小时,在第一摸不着头脑)

+0

你介意告诉我一点关于如何使用这个?我不确定哪些文件需要放在哪里。 – CalvinCopyright

+0

好的,所以我找到了这个链接:http://courses.cs.vt.edu/~cs2604/spring00/Memwatch/我将.h和.cpp文件下载到了我的目录中。我在custom.h的顶部添加了代码,然后在Cygwin上运行以下代码:“g ++ -g main.cpp custom.h memwatch.cpp -o main.exe”。它说:“memwatch.cpp:23:22:致命错误:alloc.h:没有这样的文件或目录”。有什么问题? – CalvinCopyright

+0

嗯,他们没有在C++版本中包含默认的可用库...我读取了memwatch.c文件,它已经内置了对C++的支持,并且由于C++基本上是C与对象,所以您应该能够使用C版 - 让我知道这是如何工作的。顺便说一句,对于C版本,您可以使用我在原始答案中发布的链接。 –