我正在尝试调试一个C++自定义类,该类涉及分配给我在Cygwin GCC/G++中编写和编译的堆的内存。如果我运行测试程序,它不会明确地给我一个segfault,但在程序结束时,它会说"Aborted(core dumped)"。我似乎也无法编写一个测试程序来给我一个可以在Cygwin GDB中找到的segfault。因此,我正在寻找一个内存调试器,希望它能有所帮助。
我运行的是Windows,我没有Visual Studio,我不想尝试在另一个命令提示符下为像Dr.Memory这样的调试器编译我的程序。
我可以使用哪个内存调试器?
如果需要添加内容,我将进行编辑。
您还可以使用memwatch(一种支持C++的C内存调试器)。
http://www.linkdata.se/sourcecode/memwatch/
编辑:要使用memwatch,您只需:
-
将这两个文件(memwatch.h和memwatch.c或memwatch.cpp)放入与要编译和测试的源代码相同的目录中。
-
在源代码的每个.c或.cpp文件中,您将以下三行放在顶部:
#include "memwatch.h" #define MW_STDIO #define MEMWATCH
-
编译并运行你的程序,当你试图跟随一个未初始化的指针时,它会导致你的程序失败(相当大声),如果程序成功完成,它会写一个名为memwatch.log的文件,其中包含源代码中的任何内存泄漏,以及在代码中分配每一块被侵犯内存的行
注意:这就是在C中的操作方式(我认为C++也是如此)。
你知道你有一个未初始化的指针,如果当你打印出指针时,它等于一些值,比如0xFEFEFEFEFE(一开始我花了几个小时才弄清楚)