使用gcc/g++編譯程序時加-g選項以方便調試。啓動gdb時不打印提示信息能夠加-q選項。函數
設置系統容許產生core文件:調試
$ulimit -c unlimited
調試由test程序產生的core文件:code
$gdb ./test core
設置輸出信息時的分頁功能相關命令it
set pagination on # 或者 set height <n> set pagination off # 等同 set height unlimited show height # 查看輸出頁面高度 show width # 查看輸出頁面寬度
列出全部函數io
info functions [regex] # 不帶regex的話輸出數量通常不少 info functions foo # 列出含有foo的函數名
打斷點。編譯
b <line> # 在指定行打斷點 b 12 b <func_name> # 在指定函數打斷點 b main b <filename>:<line> # 在指定源文件指定行打斷點 b test.c:15 tb <line> # 打臨時斷點,命中一次後失效 b 15 if i==0 # 打條件斷點 info b # 打印全部斷點信息
在運行r
以後會停留在斷點處,若是斷點都在同一個函數中,按n
以後是不會進入其餘函數的,只會直接執行。此時能夠在執行函數的那一行按s
來進入該函數。function
若是按了s
進入了某個不帶調試信息的函數,那麼接下來按n
都會在該函數內逐行執行,能夠經過敲finish
快速運行完該函數。或者能夠敲return <xxx>
來快速跳過下面的代碼行而直接返回。test
在運行程序的過程當中,能夠直接調用某個函數,使用的是call或print指令變量
call foo(234) print(foos("abc"))
打印當前域變量gcc
p var # var是變量名
打印全部堆棧或者指定的幀
bt # 打印全部堆棧 frame <number> # 打印並跳轉到指定序號的幀 frame <addr> # 打印並跳轉到指定地址的幀 info frame # 打印當前幀的信息