1. gcc a.c b.c c.c -o app==>gcc a.c b.c c.c -o app -g
-g:会保留函数名和变量名
2. 启动gdb
- gdb 可执行程序的名字
- gdb app
- 给程序传参:set args xxx xxx
3. 查看代码--l/list(默认打开main函数所在文件)
- 当前文件:
- l
- l 行号
- l 函数名
- 非当前文件
- l 文件名:行号
- l 文件名:函数名
- 设置显示的行数
- set listsize n
- show listsize
4. 断点操作:b/break
- 设置断点:
- b 行号
- b 函数名
- b 文件名:行号
- b 文件名:函数名
- 查看断点
- i/info b
- 删除断点
- d num(断点编号)
- 删除多个:d num1 num2;d num1-num6
- 设置断点无效
- dis num(编号)
- 断点生效
- ena num(编号)
- 设置条件断点
- b 行号 if 变量==var
4. 调试相关的命令
- 让gdb跑起来
- r(run):停在第一个断点的位置
- start:运行一行,停止
- 打印变量的值:
- p 变量名
- 打印变量的类型:
- ptype 变量名
- 变量的自动显示:
- display 变量名
- 取消:undisplay 编号
- 查看display信息:i display
- 向下单步调试:
- n(next):不会进入函数体
- s(step):会进入待函数体内部
- finish:跳出函数体
- 从循环体直接跳出:
- until(不能有断点)
- 直接设置变量等于某一个值
- set var 变量名=value
- 继续运行gdb,停在下一个断点的位置
- c(continue)
- 退出gdb:
- q(quit)