2012-09-27 37 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版本,您可以使用我在原始答案中發佈的鏈接。 –