gdb调试工具

Posted 五个板栗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试工具相关的知识,希望对你有一定的参考价值。

  1. 编译的时候需要加-g选项,得到调试表
gcc -g main.c -o main
gdb main
(gdb)list 简写l查看你的源码
(gdb)break 行号 简写b 在第几行设置断点
(gdb)b 20
(gdb)info b 查看断点信息表
(gdb)start 启动调试,单步调试
(gdb)run 简写r 运行程序,全速运行,无断点运行完,有断点在断点的位置停下
(gdb)next 简写n 继续下一条指令执行,会越过函数
(gdb)step 简写s 执行下一条指令,会进入函数
(gdb)print i 简写p i 查看变量的值
(gdb)ptype 查看变量类型
(gdb)continue 继续执行断点后续指令
(gdb)quit 退出gdb调试
(gdb)finish 结束当前函数调用
./a.out后有参数时
(gdb)set args 参数 设置mian函数命令行参数,在start之前就得设置
(gdb)backtrace 简写bt 查看函数的调用的栈帧和层级关系
(gdb)frame 编号 简写f 切换函数的栈帧
(gdb)display 设置跟踪变量
(gdb)undisplay 编号 取消设置跟踪变量

2.栈帧:随着函数调用而在栈上开辟的一片内存空间,用于存放函数调用的产生的局部变量和临时变量。

3.段错误

gdb调试工具_gdb调试

strlen出错,这种一般是因为传入参数为空指针引起来的

for(i=0;i<ps->size;i++)

printf("%-20s\\t%-4\\t%-5s\\t%-15s\\t%-20s\\n",
ps->data[i].name,
ps->data[i].age,
ps->data[i].sex,
ps->data[i].tele,
ps->data[i].addr);

五个小板栗就写过这样一段函数,把年龄的输出用了%s,导致段错误,因为字符串是以/0结尾的,输入数字之后一直碰不到\\0,

所以碰到了段错误。

以上是关于gdb调试工具的主要内容,如果未能解决你的问题,请参考以下文章

Gdb调试工具/ Makfile项目管理

[工具]GDB的命令和使用

gdb调试

GDB 多进程调试

gdb 常用选项

gdb命令使用