2013年8月20日 星期二

GDB 入門筆記 - 近端偵錯(一)

<什麼是GDB?>

GDB 是一個Debug工具,只要是使用GNU之編譯器之程式都可以利用它來debug

使用的是文字介面,目前也開始發展圖形界面

<GDB有什麼特色?>

1.可以針對程式的執行做追蹤,同時也能在追蹤時對程式內之變數做修改


2.GDB不只能對在電腦上之程式做偵錯,也可以對嵌入式系統作遠端偵錯(Remote)

                              File:Cc25-GDB-Remote-Debugging.png


<GDB學習筆記>

近端偵錯:

1.安裝gdb

  • 先確定電腦上是否已經有安裝gdb:$whereis gdb
  • 如果沒有安裝:$sudo apt-get install gdb
2.開始使用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


沒有留言:

張貼留言