2015-04-29 97 views
10

如何在gdb中包含/查看malloc的源代碼?在gdb中包含malloc.c的源代碼?

我想在gdb中執行一步一步的執行,並在任何malloc函數被調用時步入malloc.c源代碼。

目前GDB什麼說的是:這裏 malloc.c: No such file or directory.

This人面臨同樣的問題,但他們不提一個解決方案,即如何真正步入的malloc的源代碼。

我在Ubuntu server 14.04,我已經嘗試安裝以下軟件: libc6-dbglibc6-devlibc6-dbgsym。 我甚至不知道,如果這些軟件,可以幫助,但在安裝libc-dbgsym給了我以下錯誤:

dpkg: error processing archive /var/cache/apt/archives/libc6-dbgsym_2.19-0ubuntu6.6_amd64.ddeb (--unpack): trying to overwrite 
    '/usr/lib/debug/usr/lib/x86_64-linux-gnu/audit/sotruss-lib.so', which 
    is also in package libc6-dbg:amd64 2.19-0ubuntu6.6 dpkg-deb: error: 
    subprocess paste was killed by signal (Broken pipe) 
+0

你需要找到,或編譯一個庫的調試版本。 –

+0

@MartinJames這是我失敗的部分! :( – Paschalis

回答

11

以下爲我工作。不確定是否有更好的方法。

  1. 安裝的libc6-DBG(你已經這樣做): sudo apt-get install libc6-dbg
  2. 安裝eglibc源包(Ubuntu的實際使用eglibc):sudo apt-get install eglibc-source
  3. 解包安裝在/ usr/src目錄/ glibc的tar文件:/usr/src/glibc $ sudo tar xvf eglibc-2.19.tar.xz
  4. 殺青GDB和路徑添加到的malloc來源:(gdb) dir /usr/src/glibc/eglibc-2.19/malloc

(gdb) n

13 char *c = malloc(100);

(gdb) s

__GI___libc_malloc (bytes=100) at malloc.c:2876 2876

{

(gdb)

+0

工程就像魅力!另外,可以在'.gdbinit'中添加步驟4! – Paschalis

+1

太棒了!一個有點相關的陷阱(這聽起來像你知道的)。但是對於未來的讀者:不要因爲libc做各種符號體操,所以'malloc'符號不是被調用的實際'malloc',所以不要中斷'malloc'本身。相反,打入調用者並進入'malloc'調用。 – kaylum

3

GDB只能顯示源代碼,因爲調試編譯的二進制文件包含二進制之間的引用代碼和源文件。

malloc()位於C庫中。在普通系統上,它不是用調試元數據編譯的,它的源代碼也沒有安裝在系統中。

但它們可以連接,您只需要安裝這些庫的調試版本。例如,在debian上,一個apt-get install glibc-debug或類似的程序就可以完成。在SuSE上,一個zipper in libc6-debug(afaik,也許確切的軟件包名稱可能有點不同)。

+0

我應該低估只是因爲你說「gdb不是一個嚮導」! – Paschalis

+0

笑話不談,我想我是這麼做的,我在Ubuntu上,我相信'libc6-dbg'就等同於你的建議! – Paschalis

+0

@Paschalis對不起,我沒有任何負面的意圖,我從答案中刪除了這個。 – peterh