入门案例:
用gcc/g++编译:
gcc -g -o test test.c
g++ -g -o test test.cpp
其中-g是调试模式 -o是对程序进行优化连接等
终端输入gdb进入gdb调试 再 file test
如图:
注意运行是./你的c程序名
不加./可能不认为是当前目录
然后可以gdb
file hhh //调试你文件
run 就是运行 输入q或quit退出
这就是一个简单的gdb入门案例
熟悉了之后直接gdb hhh 就可以了
方便的命令: gdb hhh -tui
其实gdb -tui hhh 也行
会可视化显示你的代码 很方便
断点的设置:
b 2 在第2行设置断点
cl 2 在第2行取消断点
常用的还有b/cl 函数名 注意是在函数入口处
d:删除所有断点
d 2 删除编号2的断点
cl 2 删除第2行断点
其他命令:
c:继续运行(中断后用) 直到下一个断点
u 9:程序运行到第九行然后暂停
u fun :程序运行到fun()函数的入口暂停
disp x + 1:每次自动输出x+1的值 (x :变量)
dis disp 禁用所有disp
en disp 启用所有disp disp:display
回车:执行上条语句
n:单步运行 遇到函数直接跳过函数 计算出值
s:单步运行 和n类似 但是会进入函数内部
p x:输出x的值 (p:print)
call :执行一段代码 有返回值输出至屏幕
i (info): 好用 显示信息
i b :显示 所有断点
i lo : x显示局部变量
i disp :显示所有disp
d disp:删除所有disp
bt :查看堆栈
高级命令:
ig ignore 3 7 :让编号为3的断点前7次到达时都不停下来 第8次时停下来
cond condition 给断点加一个条件
cond 2 i > 3 : 2号断点只有在i>3才起作用
comm commands 在几号断点后停下来执行一段gdb命令 如comm 2 p x 在2号断点停下来执行p x 打印变量x的值(用得少)
wa watch
wa i 当i的值发生改变时停下来
aw awatch aw i:当变量i被读写时都停下来
rw rwatch rw i:当变量i被读时停下来
还有一个
b 7 if i ==9
在第七行设置断点 在i=9时停下来
其他技巧:
查看数组元素:
p *arr@10 查看arr数组的前10位(arr[0]-arr[9])
p arr[3]@5 查看arr[3]及其后4位 共5位