GDB程序調試工具

使用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    # 打印當前幀的信息
相關文章
相關標籤/搜索