天天看點

每天學點GDB(八)

在上一篇文章中講到了ptrace,那麼我們完全可以用ptrace來寫一個非常簡單的trace工具,用以trace程式的具體運作過程。

用它可以很清楚的回答,使用glibc編譯後的hello world是從什麼地方開始運作的。

(注:本文内容根據“a really simple tracing debugger"翻譯而來,具體連結見參考資料一節)

itrace.c

編譯:

譯者注: -m32表示編譯成32位格式,如果是在64位機器上,不需要加此選項,同時将itrace.c源碼中的eip和esp轉換為rip,rsp.

譯者注: itrace保持一緻,itrace如果是按32位格式來編譯的,此處也應該一樣。

說明如下:

addr2line 是将位址轉換為相應的源碼。運作的結果很長,是以就不打算沒有貼出來了。

為了讓運作結果在顯示的時候能夠更好的反映出調用關系,根據堆棧(%esp)中的資訊采用python腳本将其階層化的列印出來。

運作

測試結果:

<a href="http://lackingrhoticity.blogspot.ca/2009/05/really-simple-tracing-debugger.html">http://lackingrhoticity.blogspot.ca/2009/05/really-simple-tracing-debugger.html</a>

本節重點描述兩個gdb內建測試環境。

有沒有辦法在一邊調試的時候,一邊顯示對應的源碼呢?有沒有一種工具能夠将gdb內建到ide中呢,本文就試圖回答這些問題。

在linux的世界裡,emacs內建gdb來時行調試可是聞名已久,經過了不斷的演進gud也變得越來越強大,越來越好使了。

那麼如何進入gud呢,很簡單在emacs中,輸入m-x(也就是alt+x)後,輸入gdb,然後回車。有一個簡短的提示,無視直接回車即可。

每天學點GDB(八)

 在gdb所在視窗設定斷點,運作程式。

程式将在設定的斷點處停止運作,此時在菜單中選擇gud-&gt;gdb-mi-&gt;display other windows,呈現如下圖所示的效果:

每天學點GDB(八)

與上述的emacs+gdb比較起來,這個gdb tui可能默默無名。我也是在無意之中發現這個東東的,還是比較好使的, 最主要的是這個功能是gdb本身内置的。無須第三方工具。

如何進入gdb tui模式

或者在進入gdb之後輸入如下快捷鍵

c-x a

想同時顯示源碼和反彙編代碼的話,就c-x 2或者執行相應的指令layout

每天學點GDB(八)

花了15篇文章的内容,将自己日常軟體調試時使用到的gdb知識作了一個小結,希望對大家有用。同時俺徽滬一郎也希望大家在轉載的時候能夠注明原文出處,謝謝。

繼續閱讀