我知道大家沒有興趣學 gdb 的一些特異功能, 什麼遠端連線debug的...
所以這篇焦點放在幾個最簡單的用法, 希望對第三使徒有幫助...
(第三使徒到底是誰? 總覺得跟什麼 eva 有關... )
debug 前準備:
1. source code: 這個我想大家都有 (廢話)
debug 時 gdb 會顯示對應的 source code 給你看, 所以一定要有 source
2. compile 時, 要給 gcc -g 的參數, 他會做出含 debug 資訊的執行檔 (超大)
最好不要加 -O 或 -O2 的 optimize 選項, 如果加了偶而會出槌...
執行 gdb:
$ gdb aa <-- aa 是我寫的程式
從 main() 開始偵錯, 把他設為 break point
(gdb) break main
Breakpoint 1 at 0x8048338: file aa.c, line 6.
接著就可以跑了
(gdb) run
Starting program: /home/beagle/Program/test/aa
Breakpoint 1, main () at aa.c:6
6 printf("%x\n", &aaa);
會跑到 main 之後的第一行停下來, 然後你可以慢慢逐行執行了...
沒耐心的話, 設另一個 breakpoint, 然後用 continue 指令讓他快跑...
* * *
幾個指令:
quit 離開gdb, 按 Ctrl-C 也是可以滴...
break 設 breakpoint...
break 6 在第六行 break
break ftest 在 ftest() 這個 function 的第一行 break
break aa.c:6 或 break aa.c:ftest
也可以指定哪個檔的哪一行哪個 function 停下來, 如果你寫了好幾個.c
break ... if (狀況) break 後面可以加 if 判斷要不要停
tbreak 和 break 用法一樣, 但是只 break 一次就失效了...
next 或 n 執行下一行, 遇到 function call 會 step over
step 或 s 執行下一行, 但是遇到 function call 會 step into function 裡面
next 和 step 的分別是一個會把整個 function 當成一行一次執行完,
另一個則會追蹤到 function 裡面去, 大致上是差不多的指令...
run 或 r 從頭開始執行程式直到被 break 或執行完畢才會停下...
continue 或 c 被 break 之後, 用 continue 繼續跑下去...
print [變數] 把變數的內容印出來看看... print 用法很多...
watch [變數] 把變數設為 watchpoint, 每次程式 break (或在step時)都會印出
變數值省得一直打 print , 變數有改變時會自動 break ...
不瞞各位, 我就只會這一點點, 一直矇混到現在... @.@
詳細的說明書在工作站打 info gdb 有詳細解說...
其實 info 有 web 介面, 我習慣用 WWW 看 info pages, 可是不知道217有沒有裝?
用 google 找到這一頁:
http://uw713doc.sco.com/cgi-bin/info2html?(gdb.info)Top&lang=en
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.161.7.70