由于目前的開發是在一個隻有Linux核心的特定 環境進行的,Java代碼可以通過遠端調試功能在Windows下進行Debug,而C代碼就沒有那麼幸運了。幸好有同僚推薦了GDB,并且教給我了幾個簡單的指令,發現極其友善,并且功能很強大——雖然隻是幾個簡單的指令,是整個調試過程變得妙趣橫生。下面是我在調試應用的幾個簡單指令及簡單過程。
一、簡單的幾個指令:
1、attach,綁定要調試程式的線程ID,形式:attach 9987
2、dir,綁定運作程式的源檔案目錄,例如: dir /tmp
3、b,設定斷點,形式:b filename:line,例如:b general_parser.c:5695,就是在general_parser.c檔案的第5695行設定斷點。
4、advance,跳轉到某處, 形式:advance line
5、display,顯示變量或者表達式的值,在單步調試時會一直顯示,形式:display expression
6、cont,繼續執行,當運作到一個斷點時,使用該指令繼續向下執行到下一個斷點
7、n,單步執行(Step over),每次執行一句,遇到函數調用時,不會進入到函數内部。如果前面使用display指令設定了要檢視的表達式,那麼就會在執行後顯示出來。
8、s,單步跳入(Step into),也是每次執行一句,但是遇到函數調用時,會進入到函數内部。
9、list,列出産生執行檔案的源代碼的一部分
10、quit,退出
二、簡單的調試過程
1、啟動要調試的程式,并獲得其線程ID;
2、啟動gdb程式;
3、綁定調試程式的形成ID:
gdb/>attach pid
4、設定斷點:
gdb/>b general_parser.c:5695
5、繼續運作:
gdb/>cont
6、設定要檢視的變量值:
gdb/>display currentMsg
7、繼續運作:
8、等到預期輸入時,可以單步調試
gdb/>n
9、遇到函數調用,可以使用s進入,也可以使用advance直接跳轉某一行
gdb/>advance 3617
10、繼續單步執行
gdb/>n
11、退出gdb。
當然上面的調試過程隻時我在工作中的簡單過程,并不具有普遍性,但是GDB幾個簡單的指令,的确是可以解決很大的問題。
下面是一篇關于GDB的文章: