GDB的一些命令使用
本文內(nèi)容來(lá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ù)返回,然后停下來(lái)等待命令
frame(或f)
幀編號(hào) 選擇棧幀
info(或i)
locals 查看當(dāng)前棧幀局部變量的值
list(或l)
列出源代碼,接著上次的位置往下列,每次列10行
list 行號(hào)
列出從第幾行開始的源代碼
list 函數(shù)名
列出某個(gè)函數(shù)的源代碼
next(或n)
執(zhí)行下一行語(yǔ)句
print(或p)
打印表達(dá)式的值,通過表達(dá)式可以修改變量的值或者調(diào)用函數(shù)
set var
修改變量的值
start
開始執(zhí)行程序,停在main函數(shù)第一行語(yǔ)句前面等待命令
step(或s)
執(zhí)行下一行語(yǔ)句,如果有函數(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è)變量,每次停下來(lái)都顯示它的值
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é)來(lái)看,而不區(qū)分哪些字節(jié)屬于哪些變量;x命令打印存儲(chǔ)器中的內(nèi)容。 7b是打印格式, b表示每個(gè)字節(jié)一組, 7表示打印7組