在上一篇文章中講到了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所在視窗設定斷點,運作程式。
程式将在設定的斷點處停止運作,此時在菜單中選擇gud->gdb-mi->display other windows,呈現如下圖所示的效果:
與上述的emacs+gdb比較起來,這個gdb tui可能默默無名。我也是在無意之中發現這個東東的,還是比較好使的, 最主要的是這個功能是gdb本身内置的。無須第三方工具。
如何進入gdb tui模式
或者在進入gdb之後輸入如下快捷鍵
c-x a
想同時顯示源碼和反彙編代碼的話,就c-x 2或者執行相應的指令layout
花了15篇文章的内容,将自己日常軟體調試時使用到的gdb知識作了一個小結,希望對大家有用。同時俺徽滬一郎也希望大家在轉載的時候能夠注明原文出處,謝謝。