gdb调试的经验基本流程处理

一、启动调试

1、gdb启动
gdb启动非常简单,只要直接执行下面的命令:

gdb exename(调试文件的名称)

2、设置参数
如果需要调试的程序需要输入参数怎么办呢?有三种方法可以实现:
a、在启动调试程序时使用命令参数设置

gdb --args ./test  abc   //test是执行程序,abc是参数

b、在启动调试程序后用参数设置命令

setargs 参数1 参数2.....

c、在启动调试后使用运行命令带入参数

gdb test
r  参数1 ...

3、开始调试
启动调试程序后并没有进入调试程序内部,此时虽然可以设置断点等操作,但真正开始调试还要执行启动执行命令,有两种方式:
a、直接使用r(run)命令
直接进入调试状态到断点。如果没有断点,则一直执行到最终或者进入相关循环状态。
b、使用start命令
此命令只会执行到main函数的第一行。可以认为是执行r命令,但是在main函数第一行设置了断点。

4、屏蔽说明信息
在启动gdb时会出一大串的说明信息,铺天盖地的,这个当然可以不显示使用下面的命令参数-q:

gdb  exename -q

二、进程附加调试

这种情况应用在不可停止的程序调试上,有三种方式:

gdb exename  pid(进程ID,如13678)  //  附加到想调试的运行进程
gdb -p  pid                       //  附加到想调试的运行进程

//分两步执行先启动gdb,再附加
gdb  
attach 3598	                     //先启动gdb,再附加到调试程序

三、远端调试

需要下载gdbserver,在Ubuntu中可以使用apt命令来安装。成功后,找两台机器:
A:IP(192.168.2.22) 端口:8000 B:IP(不考虑)
A做为被调试端,为Server远端机,在其上执行并出现下面界面:

gdbserver 192.168.2.22:8000 d1  或者【gdbserver IP:port --attach pid】
Process /home/fjf/gdbtest/bin/d1 created; pid = 3968
Listening on port 8000

在这里插入图片描述

B做为本地调试机器,执行下面命令:

//先启动gdb
gdb
//再使用target命令连接远端即A
target remote 192.168.2.22:8000
//连接成功后,下断点
b 55
//执行
n
//显示数据
p xdata

在这里插入图片描述

下面一个本机模拟外机连接(即A、B两台机器都在一台电脑上,和网络测试一样),另外一个B本地机在另外一台机器上(A、B是完全不同的两台电脑)。

相同机器:
在这里插入图片描述

两机:
在这里插入图片描述

由于第二台机器没有拷贝源码,所以只能查看调试数据,看不到代码相关内容。

注意,这里B机器(本地机器),连接远端后不支持r命令,可以使用c命令启动执行。
这次对远端调试做了实例分析,更有可操作的借鉴性。

三、调试core文件

如果程序在运行后崩溃,可以使用gdb调试相关崩溃的信息:

gdb exename core.13567

bt

一般来说,崩溃后最有价值的当然是bt命令中看到的调用堆栈,可以大概推断到哪个函数甚至哪行出了问题。

四、进入和退出函数

在使用b命令断点打好之后,可以有几种命令来进行调试:

a、使用n或nexti命令
此命令在当前函数内执行到下一行,但不进入调用函数中。netxi代表单步执行一条机器指令,同样也不进入调用函数
b 、使用s或stepi命令
此命令与上一条命令类似,但进入函数。
c 、使用c命令
继续执行当前调试程序,走到断点或者结束。
d、使用finish命令
这可以理解成为s命令的逆向命令,退出函数调用。当然这个命令可以用在函数外部设置断点,c命令直接到断点来实现。

五、总结

gdb这个系列会不定期的根据情况来更新,主要目的是把一些前面应用时忽略的技巧和方法在实际工程中用到后就总结出来,所以可以不如以前的系列完备,如果对gdb有一些更深的了解的可以翻看一下以前的文章并对比相关书籍,一定会有所收获。
注意:要想调试,最主要的别忘记在编译程序时增加-g选项,当然在其它方式的编译情况下也要选择与此相同功能的设置,如cmake的CMakeLists.txt文件中增加“set(CMAKE_BUILD_TYPE Debug)”,诸如此类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值