GDB的一些命令使用
本文內(nèi)容來自:linuxc編程一站式學(xué)習(xí)
在編譯文件是加上 -g 編譯選項(xiàng)即可調(diào)試。gdb調(diào)試和源文件有關(guān),不止是和編譯生成的文件有關(guān)。
wytx@ubuntu:~$ gcc -g -o hello hello.c
wytx@ubuntu:~$ gdb ./hello
這就啟動(dòng)了gdb,下面是調(diào)試時(shí)需要用到的常用命令
單步、函數(shù)跟蹤等基本命令
命令 |
描述 |
backtrace(或bt)
查看各級(jí)函數(shù)調(diào)用及參數(shù)
finish
執(zhí)行到當(dāng)前函數(shù)返回,然后停下來等待命令
frame(或f)
幀編號(hào) 選擇棧幀
info(或i)
locals 查看當(dāng)前棧幀局部變量的值
list(或l)
列出源代碼,接著上次的位置往下列,每次列10行
list 行號(hào)
列出從第幾行開始的源代碼
list 函數(shù)名
列出某個(gè)函數(shù)的源代碼
next(或n)
執(zhí)行下一行語句
print(或p)
打印表達(dá)式的值,通過表達(dá)式可以修改變量的值或者調(diào)用函數(shù)
set var
修改變量的值
start
開始執(zhí)行程序,停在main函數(shù)第一行語句前面等待命令
step(或s)
執(zhí)行下一行語句,如果有函數(shù)調(diào)用則進(jìn)入到函數(shù)中
直接回車
執(zhí)行上一條命令
斷點(diǎn)相關(guān)的命令
命令 |
描述 |
break(或b)
行號(hào) 在某一行設(shè)置斷點(diǎn)
break 函數(shù)名
在某個(gè)函數(shù)開頭設(shè)置斷點(diǎn)
break…if…
設(shè)置條件斷點(diǎn)
continue(或c)
從當(dāng)前位置開始連續(xù)而非單步執(zhí)行程序
delete breakpoints
刪除斷點(diǎn)
display 變量名
跟蹤查看一個(gè)變量,每次停下來都顯示它的值
disable breakpoints
禁用斷點(diǎn)
enable breakpoints
啟用斷點(diǎn)
info(或i) breakpoints
查看當(dāng)前設(shè)置了哪些斷點(diǎn)
run(或r)
從頭開始連續(xù)而非單步執(zhí)行程序
undisplay
取消對(duì)先前設(shè)置的那些變量的跟蹤
break 10 if sum != 0 //在第10行設(shè)置斷點(diǎn),當(dāng)sum不等于0是才有效
觀察點(diǎn)相關(guān)命令
命令 |
描述 |
watch 變量名
設(shè)置觀察點(diǎn)(例如 watch temp)
info(或i)watchpoints
查看當(dāng)前設(shè)置了哪些觀察點(diǎn)
delete watchpoints
也是可以刪除觀察點(diǎn)的
x 例如:x/7b
從某個(gè)位置開始打印存儲(chǔ)器的一段內(nèi)容,全部當(dāng)成字節(jié)來看,而不區(qū)分哪些字節(jié)屬于哪些變量;x命令打印存儲(chǔ)器中的內(nèi)容。 7b是打印格式, b表示每個(gè)字節(jié)一組, 7表示打印7組