时间:2021-07-01 10:21:17 帮助过:26人阅读
1.使用gcc时,需要使用gcc -g选项
2.如果想要把生成的可执行文件的调试信息去掉,可以使用strip命令.
3.调试程序时,最好把编译器的优化给关掉
gdb调试程序的三种方式:
1.gdb filename
2.gdb attach pid # 分离可以用detach
3.gdb filename corename
gdb常用的命令:
| 命令(简写) | 含义 |
| help command | 救命啊,命令 |
| list(l) | 列出附近的代码,l -表示前面的. |
| break(b) | 打断点
b funcname b LineNo b filename:LineNo |
| run(r) | 运行 |
| continue(c) | 运行到下一个断点处 |
| print(p) |
打印, 可以查看错误p strerror(errorno) 也可以用来修改变量,比如p a = 3. 也可以计算表达式, p 1+2 |
| ptype | 打印类型,也可以打印结构体内容 |
| info thread |
打印线程的信息 切换用thread + 线程序号 |
| info args | 打印参数信息 |
| backtrace(bt) | 调用堆栈,可以使用 f 堆栈号 来切换 |
| frame(f) | 切换到某个堆栈 |
| info break(info b) | 查看断点信息 |
| enable |
+断点编号(可以多个):表示对某个起作用; 不加表示对所有起作用 |
| disable | |
| delete | |
| next(n) | 单步步过 |
| step(s) | 单步步入 |
| util | util LineNo 执行到某行 |
| jump(j) | j LineNo或者函数地址 跳转到某处 |
| finish | 执行完当前层函数,返回到上一层 |
| return | 当前层函数后面的直接不执行,返回到上一层.可以带返回值,返回值会赋给函数调用方. |
gdb调试关键点记录
标签:enable 需要 三种方式 最好 table 一个 err 生成 command