原创 GDB调试技术

2012-12-19 14:26 1321 23 23 分类: MCU/ 嵌入式

 

前言:

一:what is GDB

二:从哪里可以获取

三:make ready

四:configure

五:debug hello example

六:run gdbserver

七:run client

八:碰到的问题

前言:

因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类容如下:

20121219142218479001.jpg

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

20121219142227985002.jpg

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

七:run client

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

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

20121219142233957003.jpg

#target remote 192.168.110.9:1234 将会看到

20121219142237149004.jpg

在target端则可以看到

20121219142242130005.jpg

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

如:

#list

结果如下:

20121219142246791006.jpg

还有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下面即可。

 

 

gdb

文章评论0条评论)

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