gdb调试命令
轉自:http://blog.csdn.net/hanchaoman/article/details/5517362
一、GDB常用命令簡介
?
| r | run | 運行.程序還沒有運行前使用 |
| c???????????? | cuntinue?? | 運行到下一斷點處 |
| q | quit??????????????????????? | 退出 |
| tab | tab | 命令補全功能 |
| h??? | help | 幫助gdb調試命令 |
| s | step | 跟入函數 |
| n | next | 執行下一行的代碼。如果是函數調用,也當作一行代碼,執行到此函數返回 |
| b??? | breakpoint | 設置斷點,用法:(1)b?函數名?(2)b?文件名:行號 |
| info?b | info breakpoints | 查看斷點數 |
| del | delete | 刪除斷點:delete 斷點號 |
| l? | list | 列出代碼行。一次列10 行。 也可在 list 后面跟上 文件名:行號 |
| watch | watch | 觀察一個變量的值。每次中斷時都會顯示這個變量的值 |
| what | what | 顯示變量的類型 |
| p | 打印一個變量的值。print 也可改變一個值,通過指令 p b = 100,變量b 的值就變成100了 | |
| start | start | 從主函數 main 開始運行調試 |
| fin | finish | 運行直至當前函數返回 |
?
二、GDB命令詳解
和所有常用的調試工具一樣,gdb提供了以下功能:
#?監視程序中變量的值
#?在程序中設置斷點
#?程序的單步執行
在使用gdb前,必須先載入可執行文件,因為要進行調試,文件中就必須包含調試信息,所以在用gcc或cc編譯時就需要用-g參數來打開程序的調試選項。
調試開始時,必須先載入要進行調試的程序,可以用以下兩種方式:
*?在啟動gdb后執行以下命令:
file?可執行文件路徑
*?在gdb啟動時就載入程序:
gdb?可執行文件路徑
載入程序后,接下來就是要進行斷點的設置,要監視的變量的添加等工作,下面對在這個過程中常會用到的命令逐一進行介紹:
*?list?:顯示程序中的代碼,常用使用格式有:
list
輸出從上次調用list命令開始往后的10行程序代碼。
list -
輸出從上次調用list命令開始往前的10行程序代碼。
list n
輸出第n行附近的10行程序代碼。
list function
輸出函數function前后的10行程序代碼。
*?forward/search?:從當前行向后查找匹配某個字符串的程序行。使用格式:
forward/search?字符串
查找到的行號將保存在$_變量中,可以用print $_命令來查看。
*?reverse-search?:和forward/search相反,向前查找字符串。使用格式同上。
*?break?:在程序中設置斷點,當程序運行到指定行上時,會暫停執行。使用格式:
break?要設置斷點的行號
*?tbreak?:設置臨時斷點,在設置之后只起作用一次。使用格式:
tbreak?要設置臨時斷點的行號
*?clear?:和break相反,clear用于清除斷點。使用格式:
clear?要清除的斷點所在的行號
*?run?:啟動程序,在run后面帶上參數可以傳遞給正在調試的程序。
*?awatch?:用來增加一個觀察點(add watch),使用格式:
awatch?變量或表達式
當表達式的值發生改變或表達式的值被讀取時,程序就會停止運行。
*?watch?:與awatch類似用來設置觀察點,但程序只有當表達式的值發生改變時才會停止運行。使用格?式:
watch?變量或表達式
需要注意的是,awatch和watch都必須在程序運行的過程中設置觀察點,即可運行run之后才能設置。
*?commands?:設置在遇到斷點后執行特定的指令。使用格式有:
commands
設置遇到最后一個遇到的斷點時要執行的命令
commands n
設置遇到斷點號n時要執行的命令
注意,commands后面跟的是斷點號,而不是斷點所在的行號。
在輸入命令后,就可以輸入遇到斷點后要執行的命令,每行一條命令,在輸入最后一條命令后輸入end就可以結束輸入。
*?delete?:清除斷點或自動顯示的表達式。使用格式:
delete?斷點號
*?disable?:讓指定斷點失效。使用格式:
disable?斷點號列表
斷點號之間用空格間隔開。
*?enable?:和disable相反,恢復失效的斷點。使用格式:
enable?斷點編號列表
*?ignore?:忽略斷點。使用格式:
ignore?斷點號?忽略次數
*?condition?:設置斷點在一定條件下才能生效。使用格式:
condition?斷點號?條件表達式
*?cont/continue?:使程序在暫停在斷點之后繼續運行。使用格式:
cont
跳過當前斷點繼續運行。
cont n
跳過n次斷點,繼續運行。
當n為1時,cont 1即為cont。
*?jump?:讓程序跳到指定行開始調試。使用格式:
jump?行號
*?next?:繼續執行語句,但是跳過子程序的調用。使用格式:
next
執行一條語句
next n
執行n條語句
*?nexti?:單步執行語句,但和next不同的是,它會跟蹤到子程序的內部,但不打印出子程序內部的語句。使用格式同上。
*?step?:與next類似,但是它會跟蹤到子程序的內部,而且會顯示子程序內部的執行情況。使用格式同上。
*?stepi?:與step類似,但是比step更詳細,是nexti和step的結合。使用格式同上。
*?whatis?:顯示某個變量或表達式的數據類型。使用格式:
whatis?變量或表達式
*?ptype?:和whatis類似,用于顯示數據類型,但是它還可以顯示typedef定義的類型等。使用格式:
ptype?變量或表達式
*?set?:設置程序中變量的值。使用格式:
set?變量=表達式
set?變量:=表達式
*?display?:增加要顯示值的表達式。使用格式:
display?表達式
*?info display?:顯示當前所有的要顯示值的表達式。
*?delete display/undisplay?:刪除要顯示值的表達式。使用格式:
delete display/undisplay?表達式編號
*?disable display?:暫時不顯示一個要表達式的值。使用格式:
disable display?表達式編號
*?enable display?:與disable display相反,使用表達式恢復顯示。使用格式:
enable display?表達式編號
*?print?:打印變量或表達式的值。使用格式:
print?變量或表達式
表達式中有兩個符號有特殊含義:$和$$。
$表示給定序號的前一個序號,$$表示給定序號的前兩個序號。
如果$和$$后面不帶數字,則給定序號為當前序號。
*?backtrace?:打印指定個數的棧幀(stack frame)。使用格式:
backtrace?棧幀個數
*?frame?:打印棧幀。使用格式:
frame?棧幀號
*?info frame?:顯示當前棧幀的詳細信息。
*?select-frame?:選擇棧幀,選擇后可以用info frame來顯示棧幀信息。使用格式:
select-frame?棧幀號
*?kill?:結束當前程序的調試。
*?quit?:退出gdb。
如要查看所有的gdb命令,可以在gdb下鍵入兩次Tab(制表符),運行“help command”可以查看命令command的詳細使用格式。
本文僅對使用gdb調試過程中的一些常用指令的用法進行簡單地總結,如要獲取關于gdb的更詳細的資料,請參閱gdb的官方文檔:
?
?
轉載于:https://www.cnblogs.com/gladsomeboy/p/4067837.html
總結
- 上一篇: 前端求职-htmlcss
- 下一篇: PHPNow升级PHP版本为5.3.5的