精華區beta b92902xxx 關於我們 聯絡資訊
我知道大家沒有興趣學 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