GDB 是一個Debug工具,只要是使用GNU之編譯器之程式都可以利用它來debug
使用的是文字介面,目前也開始發展圖形界面
<GDB有什麼特色?>
1.可以針對程式的執行做追蹤,同時也能在追蹤時對程式內之變數做修改
2.GDB不只能對在電腦上之程式做偵錯,也可以對嵌入式系統作遠端偵錯(Remote)
<GDB學習筆記>
近端偵錯:
1.安裝gdb
- 先確定電腦上是否已經有安裝gdb:$whereis gdb
- 如果沒有安裝:$sudo apt-get install gdb
- 因此先寫一之測試程式testGDB.c
- 使用gcc將它作編譯 $gcc -g -o testGDB.c testGDB
- 對編譯好的執行檔做debug $gdb ./testGDB
3.gdb常用指令
- 輸入run (或是簡寫r) 可以在gdb上執行該支程式
- 如果要在程式裡面加入中斷點,輸入break(或簡寫b)例如要進入main之前就讓程式停下來
- (gdb)b main
- 或是指定某一行停下來,例如在第五行停下來
- (gdb)b 5
- 設定完中斷點輸入run(或簡寫r)可開始執行,執行到中斷點停止。
- (gdb)r
- 如果要繼續執行下一行可輸入next(或簡寫n)
- (gdb)n
- 輸入info b 可查詢現在有的中斷點
- (gdb)info b
- 輸入c則執行到下一個中斷點為止
- (gdb)c
- 另外,如果要看執行到的當前那一行時,某個變數值可利用p的指令
- (gdb)p num
<GDB基本指令>
command
|
about
|
run [args]
|
開始執行
|
start [args]
|
開始執行(並自動在main() break)
|
list [LINENUM]
[FUNCTION]
[FILE:LINENUM]
|
列出程式碼(重複list指令可接著列出下面十行)
|
print [EXP]
|
顯示expression的值
|
break[LINENUM]
[FUCTION]
|
設一個break point
|
next [TIMES]
|
執行到下一個statement(不會進入function)
|
step [TIMES]
|
執行到下一個statement(會進入function)
|
until [LINENUM]
|
執行到某行
|
continue[TIMES]
|
執行到被中斷為止
|
finish
|
執行到結束此function(還可用return直接回傳並結束)
|
info [SUBCOMMAND]
|
顯示一些資訊(ex:breakpoints: info
break)
|
help [SUBCOMMAND]
|
說明(ex: help list)
|
入門教學影片:
reference:
1.http://opencsl.openfoundry.org/Lab05_debugger.rst.html
2.http://blog.yslin.tw/2012/08/gdb.html
沒有留言:
張貼留言