2009-06-27 68 views
11

有誰知道我在哪裏可以找到C++它可以是在命令行或Eclipse插件在Windows和Linux上運行內存內存泄漏檢測工具。我希望它很容易使用。最好不要覆蓋new(),delete(),malloc()或free()。像GDB一樣,如果它將在命令行中,但我不記得被用於檢測內存泄漏。如果有一個單元測試框架可以自動執行此操作,那就太棒了。G ++多平臺的內存泄漏檢測工具

這個問題與其他問題類似(如Memory leak detection under Windows for GNU C/C++),但我覺得它是不同的,因爲那些要求Windows的具體解決方案或有我想避免的解決方案。我覺得我在這裏尋找更具體的東西。建議不必滿足所有要求,但儘可能多的會很好。

謝謝。

編輯:由於這已經出現了,通過「覆蓋」我的意思是任何需要我#include一個庫或其他改變C++如何編譯我的代碼,如果它在運行時這樣做,以便運行代碼一個不同的環境不會影響任何好的東西。另外,不幸的是,我沒有Mac,所以對此提出任何建議都是無益的,但謝謝你的嘗試。我的桌面運行Windows(我已經安裝了Linux,但我的雙顯示器無法使用它),我寧願不在虛擬機中運行Linux,儘管這肯定是一種選擇。我的筆記本電腦運行的是Linux,因此我可以在那裏使用該工具,不過我絕對會選擇堅持使用桌面電腦,因爲屏幕空間非常適合保存所有設計文檔和需求,而無需在桌面上移動太多。

注意:雖然我可能會嘗試回答,我不會一個標記爲接受,直到我已經試過的建議,這是令人滿意的。

EDIT2:我不擔心我的代碼的跨平臺兼容性,它僅使用C++庫的命令行應用程序。

回答

10

Valgrind是你best friend。 Valgrind有一個用於日食的plugin。 「可悲的是」Valgrind不能在Windows上運行,但它可以在Mac OSX,* BSD和Linux上運行,所以我認爲這是「多平臺」。 :)

Valgrind的不「覆蓋」新/刪除/的malloc /免費的,但不是在編譯過程中(這樣你就不必重新編譯如果這是你的意思)。它解釋二進制文件,因此在測試過程中性能會受到一些影響。

0

MacOS X上有leaks工具(我不知道它是否存在於其他地方),我曾經在linux上使用過一種名爲memprof的工具。還有valgrind可以在linux上運行,而且非常棒,但是性能有很大的提升,而且表面上是在macos上,但我還沒有嘗試過。

但我不知道窗口上有這樣的工具。

1

對於32位應用程序,valgrind + wine可以成爲Windows應用程序的工作解決方案。如果你的應用可以在沒有任何改變的情況下在葡萄酒下運行,那麼在valgrind + wine下運行它可以在我的(相當有限的)體驗中運行。由於您的應用程序在Linux下運行,我猜想您的應用程序可能會在wine下運行(避免使用非常特定於Windows的代碼,這在wine中尚未得到支持)。

+0

您的意思是使用Wine作爲api實現在* nix上重新編譯Windows應用程序? (我只是好奇) – olliej 2009-06-27 06:50:33

1

儘管你提到這不是優選的Boehm Garbage Collector可以用來檢測內存泄漏。簡而言之,如果垃圾收集器實際上正在運行,那麼通常你會發生內存泄漏。 Mozilla使用這種方式來檢測Firefox中的內存泄漏。

1

DUMA是一個跨平臺的泄漏檢測庫,我用於我的許多項目。這很好,因爲您不需要任何DUMA特定的頭文件,而只需鏈接庫中的鏈接,然後鏈接到包含內存分配例程的系統libc以及鏈接到libstdC++之後。

設置起來可能有些棘手,特別是在與C++項目一起使用時,但我認爲這是值得投入的時間。它幫助我在發現了一些內存泄漏之前,我可能沒有發現其他情況,以及一次我刪除了兩次分配的情況。

一個注意事項:如果您構建一個靜態存檔(在Windows上默認構建),它會更容易,因爲它有助於減少實際上由漏泄運行時造成的「誤報」。

0

在新版本的gcc中有一些東西叫泄漏消毒劑。您只需添加-fsanitize=leak即可編譯命令。然後,你正常運行你的程序,最後,如果有任何泄漏,你會得到總結(當然在終端)。