一、GDB简介
-
GDB:GNU Debugger,时GUN工程为GUN操作系统开发的调试器,但它的使用不局限于GUN操作系统,GDB可以运行在UNIX、Linux甚至Microsoft Windows.
-
GDB可以调试在C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以个别GDB运行于同一台电脑i,也可以运行在不同电脑。
-
使用GDB我们可以:
- 设置断点使程序停住
- 监视或修改程序中变量的值
- 跟踪代码执行过程
二、GDB的使用
-
程序要能被调试,必须包含调试信息
-
编译程序时,通过gcc的-g选项为程序添加调试信息, 例如:gcc –g –o helloworld helloworld.c
1.启动GDB
2.GDB命令
- file 装入想要调试的可执行文件
- kill 终止正在调试的程
- list 列出产生执行文件的源代码的一部分
- next 执行一行源代码但不进入函数内部
- step 执行一行源代码而且进入函数内部
- run 执行当前被调试的程序
- c 继续运行程序
- quit 终止gdb
- watch 使你能监视一个变量的值而不管它何时被改变
- backtrace 栈跟踪,查出代码被谁调用
- print 查看变量的值
- make 使你能不退出gdb就可以重新产生可执行文件
- shell 使你能不离开gdb就执行UNIX shell命令
- whatis 显示变量或函数类型
- break 在代码里设断点,这将使程序执行到这里时被 挂起
- info break 显示当前断点清单,包括到达断点处的次数等
- info files 显示被调试文件的详细信息
- info func 显示所有的函数名称
- info local 显示当函数中的局部变量信息
- info prog 显示被调试程序的执行状态
- delete [n] 删除第n个断点
- disable [n] 关闭第n个断点
- enable [n] 开启第n个断点
- ptype 显示结构定义
- set variable 设置变量的值
- call name(args) 调用并执行名为name,参数为args的函数
- Finish 终止当前函数并输出返回值
- return value 停止当前函数并返回value给调用者
3.GDB调试举例
- 下面的代码实现对一个整型数的反转功能,比如输入123,则 输出321。
- 但输入100时,程序的输出结果却不正确,请找出问题
- 编写一个.c程序命名为SH.
开始调试
1).输入命令gcc -o SH -g SH.c生成SH文件
2).直接gdb SH
3). Linux中,程序崩溃时,一般会产生core文件,记录进程退出前 的状态,调试段错误问题,借助于该文件,可快速定位问题。
可按如下步骤生成和使用core文件
– Step 1: 让系统产生core文件
• ulimit –c num #设定core文件容量(num为数字, 为0 是不产生core文件)
– Step 2: 运行程序,让程序崩溃,从而生成core文件
– Step 3: gdb配合core文件,定位问题
• gdb 程序名 core文件名 • 比如: gdb segDemo core
四、其他调试方法
- 利用printf + 条件编译,来辅助调试。
- 测试版:gcc –o mystrdup -DDEBUG 。
- 发布版:gcc –o mystrdup 。
这里就不放图了,自己去试。
五、心得
gdb的调试使我获益良多,对linxu的擦偶哦更加的熟练,对程序运行过程认识更加清晰。学习之路还很长,必须地更加努力才行。
六、资料引用
百度云链接
提取码:svea