接连两篇笔记vim和makefile,vim可以看作是程序的编辑,makefile可以看作程序的编译,那么是时候再整一篇程序调试的文章了。linux下调试c/c++程序的命令是gdb,下面就记录一下gdb的常用操作。
常用调试命令
只有用gcc -g
生成的程序才能调试。
命令 | 说明 |
---|---|
backtrace(bt) | 查看堆栈 |
finish | 运行完当前函数 |
frame(f) 帧号 | 选择栈帧 |
info(i) locals | 查看当前栈帧局部变量值 |
list(l) 行号 | 列出源码 |
next(n) | 执行下一行 |
print(p) | 打印表达式的值 |
quit(q) | 退出gdb调试环境 |
set var | 修改变量的值 |
start | 执行程序,在main的第一行语句前停下 |
step(s) | 执行下一步(进入函数) |
kill | 终止正在调试的程序 |
break(b) 行号 | 断点 |
break 函数名 | 断点 |
break 文件名:行号 | 断点 |
continue(c) | 从当前位置开始继续执行 |
delete breakpoints 断点号 | 删除断点 |
display 变量名 | 跟踪某个变量 |
disable breakpoints 断点号 | 禁用断点 |
enable 断点号 | 启用断点 |
info(i) breakpoints | 查看断点 |
run(r) | 重新运行程序 |
undisplay 跟踪显示号 | 取消跟踪 |
watch | 设置观察点 |
info(i) watchpoints | 查看观察点 |
x | x/7b input//从input变量处打印7个存储单元的内容 |
shell cmd | 执行命令 |
set args | 设置参数 |
show args | 查看参数 |
show paths | 查看程序运行路径 |
set environment varname=val | 设置环境变量 |
show environment varname | 查看环境变量 |
cd | 切换目录 |
pwd | 查看当前目录 |
info program | 查看程序状态 |
clear 行号n | 清除第n行上的断点 |
help | 帮助 |
启动调试方法
- gdb
- gdb
core - gdb
调试core文件
查看系统是否支持dump core功能:
1 | $ ulimit -c |
配置系统使其支持生成core:
1 | $ ulimit -c unlimited |
gdb调试core文件:
1 | $ gdb a.out my.core |
总结
上面就是个简单的入门,要想深入还是要上网搜。