2008/05/31

gdb xxgdb DDD cgdb kdbg Linux debug 除錯工具心得

在Linux 中C語言寫程式,如果要除錯就沒有Windows 平台那麼方便的IDE開發環境可用.其實其它 UNIX like 如 SCO UNIX, AIX, BSD ... 也是差不多的情形. 但至少還有 gdb 可用, 雖然它是命令列工具,但功能強大. 有興趣的人可以參考 jserv 的gdb介紹工具. 以下整理出自己學習的簡單筆記:


編譯出含除錯資訊的執行檔
gcc -g -o gcc1 gcc1.c

使用 gdb 除錯

gdb gcc1 (gcc1 為示範用的執行檔名)

設定中斷點

b main # 表示 breakpoint 在 main()

b 10 # 表示 breakpoint 設在第 10 行

列出程式碼

l # list 的第一個字母 L

執行下一行 (單步執行)

n # next

執行到一下個中斷點或結束

c # continue

單步執行, 如果有函數會進入

s # step


印出變數值

p # print

xxgdb 是gdb 的圖形介面版, 用法一樣 :

xxgdb gcc1

gdb, xxgdb 都中文顯示都沒有問題. 但換成 DDD 就不行. 其實 gdb 就很夠用了. 尤其是擅長使用鍵盤的人.

另外還有一個 cgdb , 可以將它視為文字模式gdb 加強版, 在除錯過程中上半部視窗可以同步顯示正在執行的程式碼.

cgdb 的缺點是中文會有亂碼. 使用 gdb 配合 -tui 參數有異曲同工之妙.

gdb -tui gcc1

最後壓軸上場的是 kdbg , 不再多說 看圖 :

以上這些除錯工具只有 Kdbg 安裝完會出現在 Ubuntu 應用程式>軟體開發 選單中, 其它的似乎在選單都找不到, 只好到終端機下自行下指令 gdb, ddd, cgdb, xxgdb 了. 其實, 這些工具的源頭還是gdb, 它們只是前端文字或圖形介面. 簡單一點的用 gdb, 喜歡可同步看source code 選 cgdb, 圖形介面的選 kdbg.


回想起十年前在 SCO UNIX 上寫 C 程式只能用 printf 寫 standard output 或是寫到檔案, 執行完再用 log 檔除錯. 那真是件沒效率的事, 如果能有 gdb 就好了.