by francis_hao nov 7,2016
記錄gdb常用功能。
gdb可以讓你檢視乙個程式在執行時其內部發生了什麼,或者當乙個程式崩潰時發生了什麼(通過使用gdb檢視core dump檔案)
基礎
啟動gdb
gdb 僅啟動gdb,未引導程式檔案,可通過file program進行載入,也可以在啟動時新增-q選項,不輸出版本資訊
gdb program 啟動gdb並引導程式檔案
gdb program core 啟動gdb引導程式檔案和核心檔案(檢視core dump??)
gdb program 除錯pid為的已執行程序,注意,如果目錄下有與同名的檔案,則會先檢查此檔案。
list [file:]function
從當前程式停止的位置檢視程式原始碼,直接列印到螢幕上。
break (b)
break [location] [thread threadnum] [if condition]
location:
行號函式名
檔名:行號
檔名:函式號
*位址+偏移量
-偏移量
如果沒有指定location,則會在當前執行位址設定斷點
threadnum:可以從info threads中獲取
condition :條件,例如i==5,僅當i=5時break。
info (i)
info line 當前除錯位置的程式的位址
info locals 當前堆疊下的區域性變數
info macro xx 顯示巨集xx的值
info program 程式當前的執行狀態
info registers 列出整形暫存器和值
info set 顯示gdb所有的設定(內容較多)
info sharedlibrary 顯示載入的共享庫的狀態
info source 當前原始檔的資訊
info sources 程式裡的原始檔資訊
info stack 程式堆疊的回溯資訊(類似backtrace)
info target 當前被除錯檔案的一些資訊(可以看到elf各個段)
info threads 當前已知的執行緒資訊
info tracepoints 追蹤點的狀態(how to use)
info types 顯示所有定義的資料型別(例如你定義的uchar的實際型別)
info variables 所有全域性的和靜態的變數資訊
disable
失能斷點,後面可以加斷點號,若不加則全部失能
enable
使能斷點,後面可以加斷點號,若不加則全部使能
delete (d)
刪除斷點,後面可以加斷點號,若不加則全部刪除
run [arglist]
啟動程式,同時指定程式的引數
next (n)
單步執行,如果有函式,一步執行,不進入
step (s)
單步執行,如果有函式則進入,單步執行最小語句單位
continue (c)
繼續執行,遇到斷點或結束才停止
print i (p i)
列印變數i的值
有效的變數包括當前棧的區域性變數和全域性變數,
還有一種形式可以列印乙個連續記憶體的值,常用語陣列中,這種形式就是foo@num其中foo是乙個陣列中的元素(注意,不是指標),num是要顯示的個數。同時,print命令也支援x命令的fmt,但是省略了重複數和單位長度,因為num指出了重複數,而foo指示了資料型別,也就知道了單位長度
例如:p /u *name@10
其中name是乙個陣列
edit [file:]function
從當前程式停止的位置檢視程式原始碼,預設是行模式,可以輸入vi進入類似vi的模式
set print element 0
改變顯示字串的個數限制,從而顯示所有的字串
backtrace (bt)|where
檢視當前函式呼叫棧的所有資訊,後面可跟數字表示只列印棧頂n層的資訊
up用於bt後,跳到上一函式棧,以檢視上一函式棧的資訊
down
用於bt後,跳到下一函式棧,以檢視下一函式棧的資訊
finish
退出當前函式,可返**用它的上一層函式
q退出gdb除錯
disassemble
對當前函式對應的二進位制進行反彙編
thread
切換當前除錯的執行緒為指定id的執行緒
gdb -p
除錯指定id的程序,gdb可以除錯已經執行的程式。
或者在進入gdb之後輸入:attach
高階
examine (x)
x/fmt address
檢視記憶體
address是乙個要檢視的記憶體位址表示式,
fmt 是 重複數+格式+單位長度的組合。
單位長度有:b(一位元組byte),h(二位元組halfword),w(四位元組word),g(八字節giant)。
比如x/2xw,表示以十六進製制顯示兩個四位元組大小的記憶體資料
預設的格式和單位長度是上次使用的值,預設的重複數是1,預設的位址是接著上次使用該命令或print命令的位址。
gdb_tips :
用gdb除錯程式
gdb backtrace bt 檢視程式crash堆疊資訊
用gdb除錯程式—偵錯程式gdb常用功能
gdb的基本用法
gdb設定條件斷點
gdb 實用小記
將日常常用的gdb操作記下來,記憶力不好 1.gdb 除錯程式 gdb 程式檔案 2.gdb 除錯程序 gdb attach 程序pid 3.gdb 除錯core檔案 gdb core core檔案 也可以 gdb c core檔案 也可以 gdb xx.dbg 帶 g編譯後的可執行檔案 core檔...
gdb除錯學習小記
由於最近搞了一發sublime text的使用,然後發現這東西只能當編譯器,不能用來除錯 於是便去學了一發gdb的除錯方法。然後發現報錯了?仔細一看,原來是pascal的gdb把c 的gdb覆蓋掉了233 怎麼那麼相似呢 機房渣渣win7 32bit mingw file 檔名 開始除錯這個檔案 r...
GDB除錯core檔案小記
1.如果不走配置,必須在當前shell中設定core檔案的限制 2.在當前shell中設定core限制,在其他shell中啟動程式,是不會生效的 3.core一般很大,最好設為unlimited 4.root 使用者使用ulimit c unlimited命令,開啟core dump功能,並且不限制...