ITKeyword,专注技术干货聚合推荐

注册 | 登录

建立嵌入式gdb调试环境

willand1981 分享于 2010-06-17

推荐:嵌入式的gdb调试

2008-04-30 23:51http://dipeng.blog.hexun.com/1654921_d.html   在开发过程中有很多问题如果用gdb进行调试跟踪会大大提高效率,但是我发现不少同事对于gdb调试

2018阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

建立嵌入式gdb调试环境
 

一.下载gdb-7.1.tar.gz源代码
phil@ubuntu-embedded:~/gdb-7.1$ wget http://ftp.gnu.org/gnu/gdb/gdb-7.1.tar.gz

 

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

2.1 编译GDB Client
phil@ubuntu-embedded:~/gdb-7.1$ cd gdb-7.1/

phil@ubuntu-embedded:~/gdb-7.1$ ./configure --target=$TARGET --prefix=$PREFIX

phil@ubuntu-embedded:~/gdb-7.1$ make

phil@ubuntu-embedded:~/gdb-7.1$ make install

phil@ubuntu-embedded:~/gdb-7.1$ ls rls/bin/

arm-linux-gdb  arm-linux-gdbtui  arm-linux-run

phil@ubuntu-embedded:~/gdb-7.1$ file rls/bin/arm-linux-gdb

rls/bin/arm-linux-gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

 

2.2 编译GDB Server
#cd ./gdb/gdbserver
#./configure --target=arm-linux --host=arm-linux
 

三.实战调试
1.编辑文件
# vi 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.45
     board   ip:192.168.1.180   
将文件拷贝到目标板上:
先将gdbtest和gdbserver两个文件拷贝到主机的/tftpboot目录下
在目标板的Linux中运行:
#mount 192.168.1.108:/tftpboot /mnt/nfs
#cd /mnt/nfs
#ls
看是否有gdbtest和gdbserver两个文件。
3.运行调试
client board:
#./gdbserver 192.168.1.45:1234 gdbtest  // 目标板上运行gdbtest 监听端口1234
 

host pc:
#cd /usr/local/arm-gdb/bin/
#copy gdbtest /usr/local/arm-gdb/bin/   // 将前面编译的文件gdbtest拷贝到此目录
#./arm-linux-gdb gdbtest
(gdb)target remote 192.168.1.180:1234   // 连接到开发板 成功后就可以进行调试             
(gdb)list   or l
(gdb)break func
(gdb)break 22
(gdb)info br   
(gdb)continue   or c    //记住这里不是用run, 因为程序已在Target Board上面由gdbserver启动了。结果输出是在Target Board端

 

(gdb)next   or n
(gdb)print or p    result 
(gdb) finish        // 跳出func函数
(gdb) next
(gdb) quit
建立连接后进行gdb远程调试和gdb本地调试方法相同
 

 说明: 
1)目标机上的被调试程序gdbtest, 与主机上的程序gdbtest, 是相同的程序, 但位置不一样,并非是用网络共享的同一个位置的同一个文件, 一个在目标机上 ,一个在主机上, 没有关系.

 

推荐:嵌入式Linux的GDB远程调试的实现

  远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调

建立嵌入式gdb调试环境   一.下载gdb-7.1.tar.gz源代码 phil@ubuntu-embedded:~/gdb-7.1$ wget http://ftp.gnu.org/gnu/gdb/gdb-7.1.tar.gz   二.编译 GDB #tar zxvf gdb-7.1.tar.gz   2.1 编

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。