原创 linux下如何断点调试!

2014-7-9 19:44 2132 29 29 分类: 消费电子

 GDB调试文档

                      作者:下家山

前言:···· 1

一:what is GDB·· 1

二:从哪里可以获取···· 1

三:make ready·· 1

四:configure·· 2

五:debug hello example·· 2

六:run gdbserver·· 3

七:run client·· 3

八:碰到的问题···· 4

九:结束语···· 5

 

前言:

     因GDB这部分我做得很不理想(不能debug module,也不能debug kernel),所以心得和调试经验就比较少。

一:what is GDB

     GDB-即GNU-Project-Debugger;

二:从哪里可以获取

我用的是gdb-6.4,官方下载地址:http://ftp.gnu.org/gnu/gdb/

官方相关文档:http://sourceware.org/gdb/current/onlinedocs/gdb_toc.html

三:make ready

     因为我的环境是:

     Host:一台装有ubuntu的PC(192.168.110.77)

     Target:LYTs3c2410开发板(192.168.110.9)

     Host上的目录结构为:

          root@pc-ubuntu:/home/cgm/gdb/                 (总目录)

                                 gdb-6.4               (即解压后的源码)

                                 build/                 (build目录)

                                     client/             (gdb-6.4 build相关信息)

                                     server/             (gdbserver build相关信息)

                                 gdb_client_install/    (gdb-6.4 make install 安放目录)

                                 gdb_server_install/  (gdbserver make install 安放目录)

四:configure

Configure client

root@pc-ubuntu#cd /home/cgm/gdb/build/client

 

#/home/cgm/gdb/gdb-6.4/configure --target=arm-linux –prefix=/home/cgm/gdb/gdb_client_install/

#make

#make install

Configure GDBServer

#cd /home/cgm/gdb/build/server

#CC=arm-linux-gcc /home/cgm/gdb/gdb-6.4/gdbserver/configure –host=arm-linux –prefix =\

Home/cgm/gdb/gdb_server_install/

#make

#make install

五:debug hello example

     准备hello.c文件

     如:

     /*Hello.c*/

#include

int a=9;

int main(void)

{

       char *hello="hello!\n";

       unsigned short i;

       for(i=a;i<16;i++)

       {

              printf("%s",hello);

       }

       return 0;

}

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

将会得到名为hello的可执行文件

六:run gdbserver

copy gdbserver 和hello到target nfs 目录下

#cp / Home/cgm/gdb/gdb_server_install/bin/gdbserver  home/cgm/Linux/root_nfs/

#cp /home/cgm/gdb/hello/hello  /home/cgm/Linux/root_nfs/

通过NFS方式加载kernel zImage

#ls类容如下:

#./gdbserver 192.168.110.77:1234 hello 现象如下:

这样gdbserver就处于listen状态,等待client的链接.

七:run client

#cd /home/cgm/gdb/gdb_client_install/bin/

#./arm-linux-gdb /home/cgm/Linux/root_nfs/hello现象如下

#target remote 192.168.110.9:1234 将会看到

在target端则可以看到

接下来就可以在client端输入各种gdb的命令了

如:

#list

结果如下:

还有break,info all-registers,info locals,print a(a为变量)等命令。

(gdb)break 11  (即在11行处设置断点,程序运行到此处则停下)

(gdb)info all-register (显示左右register值)

(gdb)info locals(显示所有局部变量的值)

(gdb)print a (a即为hello.c里面的一个全局变量,此命令即显示当前a的值)

八:碰到的问题

问题一:

# ./gdbserver 192.168.110.77:2345 hello

./gdbserver: error while loading shared libraries: libthread_db.so.1: cannot open shared object file: No such file or directory

到相关的toolchain (我用的是arm-3.4.1)里面找到需要的库,考到root_nfs的lib下面即可。

问题二:

Run命令不能执行

在host上,run命令不能执行,必须用C。具体原因我还不知道。

九:结束语

调试可加载模块(.ko)还没有实现,哪位实现了,可否与我联系,本人一定请教。

       2008-6-13   下家山     写于上海.松江

              Email:ximenpiaoxue4016@sina.com

      

 

 

文章评论0条评论)

登录后参与讨论
我要评论
0
29
关闭 站长推荐上一条 /2 下一条