本节是前面章节的延续,主要介绍gdb调试的命令。
一、gdb调试前的准备工作
需要编译的时候,加参数g,生成带调试信息的可执行文件,用于以后的gdb调试。例:
gcc -g hello.c -o hello
二、gdb调试命令
功能 | 命令 |
---|---|
启动gdb | gdb hello |
查看文件list | l |
查看sort.c第20行 | l sort.c:20 |
查看sort.c中的sort函数 | l sort.c:sort |
第22行打断点(break) | b 22 |
条件断点,第22行当 i ==15时停止 | b 22 if i==15 |
显示断点信息i(info) | i b |
运行(start只运行一步,run一直到断点处) | start/run |
单步调试n(next) | n |
一直运行到下一个断点位置停下c(continue) | c |
单步调试,但是可以进入函数s(step) | s |
查看j的值p(print) | p j |
查看变量array的类型 | ptype array |
追踪 i 的值 | display i |
不再追踪变量i | undisplay +追踪变量 i 的编号 |
显示追踪变量的编号 | info display |
跳出当前函数,注意需要去掉当前函数中的断点 | finish |
删除断点d(delete) | d +断点编号 |
显示断点编号 | info b |
直接设置变量 i 的值为10 | set var i=10 |
退出gdb | quit |
下面举一个小例子,运用一下上面的命令
#编译hello.c生成带调试信息的可执行文件
gcc -g hello.c -o hello
#启动gdb
gdb hello
#开始运行
start
#第20行,当i=15时打断点
b 20 if i==15
#查看断点信息
info b
#一直运行至断点位置
c
#查看i的值
p i
#追踪i的值
display i
#然后一直next查看
n
#查看追踪变量的编号
info display
#取消追踪变量,假设上一步查到追踪变量i的编号是4
undisplay 4
#删除断点,假设上面断点的编号为3
d 3
#退出gdb
quit
只是一些gdb调试基本命令,温故而知新。