Linux下GDB远程调试技术

Linux下GDB远程调试技术

1. 远程调试的意义

1.      软件只在特定机器环境下出错,可以通过远程调试查找原因

2.      与第三方合作,不方便提供代码,但是又必须解决在合作方机器上出现的特定BUG

3.      嵌入式开发

2. 注意事项

1.      要gdb支持远程调试,则必须在远程机器上面安装gdbserver,

2.      要求两边的gdb版本必须一致

3.      远程机器必须有目标程序,调试时需要通过gdbserver来启动目标程序

4.      客户机(本地机器)必须有源码,否则debug时无法跟踪符号

5.      客户机和服务器的操作系统版本要兼容

6.      编译时不能采用-g –O2,只能采用-g,否则编译器会优化,代码不一定按照正常顺序执行,对于远程调试造成一定困扰

3. 安装步骤:

1.      查看客户机和远程机器的gdb版本可以用命令:rpm –qa | grep gdb

2.      下载gdb源码包(http://ftp.gun.org/gun/gdb)

3.      下载下来就可以解压,编译,安装,用tar命令和./configure;make;make install

4.      还可以用yum安装yum install gdb gdbserver

这个是我的远程机器安装了gdb和gdbserver


这个是本地机器只安装了gdb

4. 测试步骤

1.      测试环境,我的远程机器ip为(192.168.9.22) 本地机器ip为(192.168.16.4)

2.      可以查看它们相对应目录下面的东西


3.      在远程机器上面用gdbserver启动程序gdbserver 192.168.16.4:5678 sum

设置信任的客户机和监听端口,并启动程序.显示类是结果表明启动成功

4.      在本地进入源码目录,启动 gdb sum

5.      连接到远程目标机器(gdb)target remote192.168.9.22:5678

会显示如下信息

远程机器也会显示以下信息

出现remote debugging from host 192.168.16.4

这种情况说明远程调试机器和本地机器正确建立连接,并准备开始建立远程调试.

6.      执行gdb调试命令和本地调试基本一样

7.      运行需要注意用c 或continue,不能使用r或run,因为要调试的使远程目标程序,不是运行本地程序.

我是直接运行c执行命令本地显示结果如下

远程机器显示结果程序退出

代码的输出信息只在远程机器上面打印出来了.

5. 附录测试代码

#include<stdio.h>

intfunc(int n)

{

     intsum = 0 ,i;

     for(i= 0; i < n; i++)

     {

sum += i;

     }

     returnsum;

}

int main()

{

     inti;

     long result= 0;

     for(i= 1; i <= 100 ; i++)

     {

          result+= i;

     }

     printf("result[1-100]= %d\n",result);

     printf("result[1-250]= %d\n",func(250));

     return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值