2013-02-08 23 views
2

我想查看哪個進程導致了內存泄漏,並轉儲導致它看到什麼問題的堆。在gdb中爲linux啓用memleak選項

我在gdb中使用哪個命令來設置內存泄漏並檢查堆?

我想:

(gdb) check -leaks 

checkpoint: can't find fork function in inferior. 

(gdb) help info heap 

Undefined info command: "heap". Try "help info". 

(gdb) help info leaks 

Undefined info command: "leaks". Try "help info". 
+2

使用類似valgrind的東西? – vonbrand 2013-02-08 15:00:42

+0

所以gdb沒有任何內置的命令來做到這一點? 基本上在我的組織中,我不具有root權限,不知道他們是否會安裝valgrind – user862833 2013-02-08 15:01:43

+0

您*嘗試* valgrind? – jsj 2013-02-08 15:03:08

回答

9

Valgrind是你的答案,因爲人們已經指出。通常,Valgrind只會在程序執行結束時報告錯誤。您可以將Valgrind與GDB(vgdb)鏈接,以在程序執行期間轉儲Valgrind統計信息,同時在GDB下運行。

請參閱類似的問題問:

Dumping contents of lost memory reported by Valgrind

+1

+1,表示您可以鏈接'GDB'和'Valgrind'。 – 2013-02-08 15:59:17

+1

雖然我喜歡valgrind,但不幸的是它並不適用於所有平臺。 OP詢問gdb,它可以在比valgrind更多的平臺上使用(例如,sparc solaris)。 – 2014-04-10 17:46:42

2

info leaksinfo heap是在僅在HP-UX(HP-UX GDB GDB可用的命令是Open Source GNU調試GDB的定製版本並在The HP Wildebeest Debugger (WDB)-http://www.hp.com/go/wdb上被調用)。在Linux上,您需要使用valgrind