今天學習使用gdb,現總結如下:
關于斷點的命令:
awatch:
awatch用來為一個表達式設置觀察點,在表達式的值發生改變時,或者當表達式的值被讀取的時候,程序停止執行。
break:
用于在程序中設置斷點 break + 要設置斷點的行號
clear:
用于清除斷點 clear + 要清除斷點的行號
commands:
用于為遇到斷點之后執行特定的指令而設置的 command + 斷點號
如果commands 之后沒有斷點號,gdb會將最后一個設置的斷點編號作為默認值。
condition:
在滿足一定的條件時才在指定的行上設置斷點 condition 斷點編號 條件表達式
delete:
用于清除斷點和自動顯示的表達式的命令。與clear的不同之處:clear要給出斷點的行號,delete要給出斷點的編號。用clear命令清除斷點時gdb會給出提示,而用delete清除斷點時gdb不會給出任何提示
disable:
讓所設斷點暫時失效。如果要讓多個編號處的斷點失效可將編號之間用空格隔開
enable:
與disable 相對
ignore:
這條命令在一定范圍內忽略用戶設定的斷點 ignore N CONT
tbreak:
用于設置臨時斷點,所謂臨時斷點就是斷點只在設置之后起作用一次。
watch:
與awatch類似
關于數據的命令:
display:
該命令用于顯示表達式的值,使用了該命令后,每當程序運行到斷點處都會顯示表達式的值。 display 表達式 如:display 5*j
info display:
用于顯示當前所有要顯示值的表達式的有關情況
delete display:
用于刪除一個要顯示值的表達式,調用這個命令刪除一個表達式后,被刪除的表達式將不被顯示。 delete display 1
disable display:
使一個要顯示的表達式暫時無效??捎衑nable重新使之有效
enable display:
反操作disable diplay
undisplay:
用于結束某個表達式值的顯示。同delete display功能相似
whatis:
顯示某個表達式的數據類型 如:whatis j
print:
用于打印表達式的值??梢源蛴却嬷袕哪硞€變量開始的一段區域的內容。$表示給定序號的前一個序號,$$表示給定序號的向前第2個序號。例如給定序號是5,那么$代表4,$$代表3.如果是print $表示 print 1
print還可用于對變量賦值如print j=8;
print打印內存中從某個部分開始的一塊連續空間的內容。如print 開始表達式@要打印的連續空間的大小
ptype:
用于給出類型的定義。疑問ptype與whatis的區別?
set:
set variable 用于為變量賦值 類似print set variable j=9 print j=9
關于文件的命令
add-shared-symbol-files:
該命令用于從動態的連接映射的共享目標文件中裝入符號表。
add-symbol-file:
該命令用于從已經動態裝入的文件中裝入負號表。使用格式是:add-symbol-file FILE ADDR其中FILE給出的是動態裝入的文件的名稱,ADDR是文件中正文的起始地址。
cd:
改變當前工作目錄。
core-file:
使某個文件成為core dump
directory:
用來向源文件搜索目錄中添加一個目錄
file:
用來裝入待調試程序的命令。
list:
list的非空系數的幾種形式:
LINENUM:當前文件的LINENUM行
FILE:LINENUM: 指定文件的LINENUM行
FUNCTION:當前文件的FUNCTION函數
FILE:FUNCTION
*ADDRESS列出包含該地址的文件
list 起始行號 截止行號
forward:
用來從列表當前行開始向后查找第一個匹配某個字符串的程序行 forward 匹配的字符串
load:
該命令用于動態的向正在調試的程序中裝入文件,并記錄它的符號表,準備聯接
path:
該命令用于向目標文件的搜索路徑中增加目錄的,可以使用當前目錄的$cwd
pwd:
顯示當前工作路徑
reverse-search:
從列表當前行開始向前查找第一個匹配的字符串,查找到的行號保存在$_中
search:
同forward
關于程序運行的命令:
cont:
使程序繼續執行
handle:
對信號設置處理函數。如:handle 信號 信號處理
信號可以是符號,也可以是數字。如果用all來作參數,則意味著調試器接受除了(信號SIGTRAP和信號SIGINT)之外的所有信號
處理函數:
stop:如果信號發生重新進入調試器,并打印出提示信息;
print:如果信號發生就打印一條提示信息
pass:讓程序能看到這個信號發生
jump:
指定程序開始調試的指令和地址 jump 行號或是指令地址
kill:
結束當前程序的調試。
next:
繼續程序的運行,越過子程序調用
nexti:
用于單步執行一條語句中的一條指令,它會跟蹤到子程序的內部,next用于單步執行一條語句,而nexti用于單步執行一條指令,一條語句可能有幾條指令構成。
step:
用于執行一條語句的,也不越過子過程的調用
stepi:
用于執行一條指令的,它不越過子程序的調用,而是跟蹤到子過程的內部
關于堆棧的命令:
backtrace:
用來打印棧偵指針的。backtrace 要打印的棧偵指針的個數
frame:
該命令用于打印棧偵的。frame 要打印的編號
select-frame:
指定要選擇的棧偵的編號。一般與info frame連用。
info reg:查看寄存器使用情況。
info stack:查看棧。
where:查看當前位置。
up:跳到上一層函數。
down:與up相對。
attach <進程號>:把當前高度的程序粘在某個進程上,用于調試運行中的進程。
ptype <變量or數據類型>:查看變量或數據類型的定義。