Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2117722
  • 博文数量: 374
  • 博客积分: 7276
  • 博客等级: 少将
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-06 16:35
文章分类

全部博文(374)

文章存档

2013年(23)

2012年(153)

2011年(198)

分类: LINUX

2011-12-01 11:54:32

首先说明一下,这篇文章是参考论坛里的一篇文章,但是它有一些错误,害的我找了半天才纠正过来。。。

1、说明:
开发板:mini2440
交叉编译工具:arm-linux 4.3.2
gdb版本:gdb-6.6

2、首先是以上的这些东西你都要准备好,然后才能往下进行。

简要说明一下gdb-6.6的安装
首先是下载GDB

我下载的是GDB6.7,不要下载最新的,因为最新的容易有bug。我已经事先安装好了arm-linu-交叉工具,版本是4.3.2,等会编译的时候要用到。linux平台是rhel5.5

解压到/opt目录下

#cd /opt
#tar zxvf gdb-6.6.tar.gz


3. 建立配置文件、编译
gdb允许把编译配置和编译结果放到任意的目录,因此可以在gdb目录之外建立一个专门存放编译结果的目录。

#cd /opt
#mkdir -p arm-gdb/build
#cd arm-gdb/build
#/opt/gdb-6.6/configure --target=arm-linux --prefix=/opt/arm-gdb
#make
#make install

    这时候,已经在/opt/arm-gdb/bin目录编译出来了arm-linux-gdb,将它拷贝到/usr/bin
    cd /opt/arm-gdb/bin
    cp arm-linux-gdb /usr/bin
4. gdbserver的移植 
gdbserver要用到gdb源码目录下的一些头文件,因此无法在gdb源码目录之外编译文件。

#cd /opt/gdb-6.6/gdb/gdbserver/
#./configure --host=arm-linux --target=arm-linux --prefix=/opt/arm-gdb/gdbserver
#make
#make install


5. 使用gdbserver 
     5.1 首先要把上一步编译出来的gdbserver拷贝到开发板的根目录。

cd /opt/arm-gdb/gdbserver/bin

      并改名为gdbserver

    5.2 准备条使用示例程序,代码如下

#include
//helloworld GDB实例程序
int main()
{
    printf("helloworld !\n");
    return 0;
}


然后对其编译,注意一定要加上调试选项 -g

# arm-linux-gcc -g hello.c -o hello


将最后生成的可执行文件拷贝到开发板的根目录下

     5.3 启动开发板,准备调试。
   我的开发板是mini2440,官方给的资料很好,可以直接以NFS方式启动开发板,所以,mini的兄弟们,你们都懂的。。。*……*……*
好的。说一下我的启动选项,

开发板 IP:192.168.1.70(启动时的临时 IP )
主  机  IP:192.168.1.168
    5.4开始真正的调试
如果你都按照我的操作来的话,即:
  1. 已经将编译好的gdbserver放到了开发板的根目录。对于我的mini2440开发板来说,放在了:/opt/friendlyARM/mini2440/root_qtopia
  2. 同时你的hello示例程序也要放在这个目录。
开始调试:
5.4.1 在开发板启动调试:
      在开发板输入:

#./gdbserver 192.168.1.168:1234 hello
    其中,192.168.1.168是我的linux主机的IP地址,1234是端口号,随意设置,这个在下面会用到的。

     然后在你的linux主机的NFS目录下,注意,必须是你开发板NFS挂载的目录下运行

arm-linux-gdb hello

然后主机会提示如下信息:

GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...
(gdb)


其中 --host=i686-pc-linux-gnu --target=arm-linux"...指明了 host主机是PC机器,而目标主机是ARM

然后,通过在输入如下指令才能够执行程序:

target remote 192.168.1.70:1234

  说明:192.168.1.70是我的开发板的IP地址,1234必须和ARM终端上输入的一致才行。
到这个时候,linux主机提示

Remote debugging using 192.168.1.70:1234
0x400007b0 in ?? ()
   from /opt/friendlyARM/mini2440/root_qtopia/lib/ld-linux.so.3
(gdb)


而ARM开发板则显示:

Remote debugging from host 192.168.1.168


到这个时候,开发板和linux的GDB连接才真正建立起来。下面就是调试了。

6.具体的调试

等连接建立起来之后,你就可以在你的Linux下调试ARM程序了。

6.1  例如输入 list(或者 l ) ,则会显示你要调试的代码

(gdb) l
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("Hello world !\n");
6 return 0;
7 }

6.2   输入 b main ,则是在main函数处建立断点

(gdb) b main
Note: breakpoint 1 also set at pc 0x8384.
Breakpoint 2 at 0x8384: file hello.c, line 5.


6.3   输入 c 则是继续运行代码。因为你的程序已经事先在ARM开发板上运行起来了,只能conginue

(gdb) c
Continuing.
Breakpoint 1, main () at hello.c:5
5 printf("Hello world !\n");   //这是显示的下一行代码


6.4   输入q 则是退出gdb调试程序

(gdb) q
The program is running. Exit anyway? (y or n)


至此就完成了GDB调试。

7.你也可以使用图形化的DDD来调试
    7.1 首先在开发板上运行gdbserver,参照上面的命令。
    7.2其次,在linux下相应的目录下输入一下命令。
                                                                                                                     

ddd -debugger arm-linux-gdb hello


然后在gdb窗口输入远程连接mini2440的命令。

target remote 192.168.1.70:1234


就可以调试了

8.另外。在安装gdb 7.2的时候,编译安装gdbserver的时候,有个小错误提示:
/usr/bin/install: 无法 stat “libinproctrace.so”: 没有那个文件或目录
解决办法是:

修改gdb/gdbserver/Makefile.in文件,找到这句:

if [ x$IPA_DEPFILES != x ]; then \

原文是这样改的:

if [ x"$(IPA_DEPFILES)" != x ]; then \

但是我觉得不好看,我把这句改为:

if [ x${IPA_DEPFILES} != x ]; then \ 注意:把 IPA_DEPFILES两边换成{}

这下编译安装就没有问题了。

阅读(4380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~