但使书种多,会有岁稔时。这篇文章主要讲述gdb调试工具相关的知识,希望能为你提供帮助。
- 编译的时候需要加-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.段错误
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调试工具】所以碰到了段错误。
推荐阅读
- Linux矿虫现形记
- Kubernetes——污点容忍故障排除
- 如何从 Ubuntu 中彻底卸载 Google Chrome
- Veeam Backup & Replication(如何使用U盘或移动硬盘作为备份存储())
- Docker 搭建 JIRA 备忘笔记
- centos7升级gcc版本
- N62-5
- 盘点Linux中最常见的系统服务和服务的查看启用和终止
- SpringCloud之Eureka注册中心与Robbin负载均衡