Linux的GDB远程调试的实现

一.下载gdb-6.5.tar.gz源代码
http://ftp.gnu.org/gnu/gdb/

二.编译 GDB
# tar zxvf gdb-6.5.tar.gz

2.0 把bin.rar中的文件解压,并拷贝到/usr/local/bin/下

2.1 编译GDB Server
# cd gdb-6.5
# ./configure --target=arm-linux --prefix=/usr/local/arm-gdb
# make
# make install           // 生成/usr/local/arm-gdb/bin

2.2 编译GDB Client
# cd ./gdb/gdbserver
# export PATH=$PATH:/usr/local/arm-gdb/bin
# ./configure --target=arm-linux --host=arm-linux

# vi config.h
    //#define HAVA_SYS_REG_H    //注释此句(gdb-6.5里面已经注释了此句)

# make CC=arm-linux-gcc          //编译用于目标机的stub程序  生成gdbserver是GDB客户端程序,在板子上运行。

三.实战调试
1.编辑文件gdbtest.c
#include <stdio.h>
int func(int n)
{
    int   sum=0, i;
    for (i=0; i<n; i++)
    {
        sum += i;
    }
    return sum;
}
int main(void)
{
    int   i;
    long result = 0;
    for (i=0; i<=100; i++)
    {
        result += i;
    }
    printf("result[1-100] = %d /n", result);
    printf("resutl[1-225] = %d /n", func(255));
    return 0;
}
# arm-linux-gcc -g gdbtest.c -o gdbtest         // 交叉编译
2.下载文件到目标板: gdbtest和gdbserver
假设     host pc ip:192.168.1.180
        board   ip:192.168.1.46   
将文件拷贝到目标板上:
第一步:先将gdbtest和/gdb-6.5/gdb/gdbserver/gdbserver两个文件拷贝到主机的/tftpboot目录下

在目标板的Linux中运行:
# mount 192.168.1.180:/tftpboot /mnt/nfs
# cd /mnt/nfs
# ls
看是否有gdbtest和gdbserver两个文件。

第二步:
    方法一:将/usr/local/arm/2.95.3/arm-linux/lib/目录下的libthread_db.so,libthread_db.so.1,libthread_db-1.0.so(如果没有的话,自己找一下)三个文件拷贝到主机的/tftpboot目录下
    在目标板的Linux中运行:
# cd /lib/
# ln -s /mnt/nfs/libthread_db.so libthread_db.so
# ln -s /mnt/nfs/libthread_db.so.1 libthread_db.so.1
# ln -s /mnt/nfs/libthread_db-1.0.so libthread_db-1.0.so
# ls
    看是否有libthread_db.so,libthread_db.so.1,libthread_db-1.0.so三个文件。

    方法二:自己重新制做文件系统:把libthread_db.so,libthread_db.so.1,libthread_db-1.0.sos三个文件做到文件系统的lib中。
3.运行调试
在目标板的Linux中运行:
# cd /mnt/nfs/
# ./gdbserver 192.168.1.46:1234 gdbtest  // 目标板上运行gdbtest 监听端口1234
Process gdbtest created; pid = 79
Listening on port 1234
出现以上信息说明目标板运行成功。

在主机的Linux中运行:
# cd /usr/local/arm-gdb/bin/
# cp /root/gdbtest /usr/local/arm-gdb/bin/   // 将前面编译的文件gdbtest拷贝到此目录
# ./arm-linux-gdb gdbtest
(gdb)target remote 192.168.1.46:1234   // 连接到开发板 成功后就可以进行调试             
(gdb)list   or l
(gdb)break func
(gdb)break 22
(gdb)info br   
(gdb)continue   or c    // 这里不能用 run
(gdb)next   or n
(gdb)print or p    result 
(gdb) finish        // 跳出func函数
(gdb) next
(gdb) quit
建立连接后进行gdb远程调试和gdb本地调试方法相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxg623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值