广告

原创 GDB调试技术

2012-12-19 14:26 456 0 分类: 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下面即可。

 

 

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
ximenpiaoxue4016_943027965 2016-04-17 17:59
好的理论可以避免犯错——读《丈量世界》有感!
     《丈量世界》,早就因为仰慕高斯而想看这本书      1.殊途同归      这本书写的是高斯和洪堡两个人,为什么要把这两个人放在一起写呢?因为高斯是一个宅男,不喜欢什么旅游,考察!他觉得...
ximenpiaoxue4016_943027965 2016-04-05 09:10
叛逆在爱因斯坦性格中的重要性(一)
叛逆在爱因斯坦性格中的重要性(一) 《爱因斯坦传》读书笔记      昨天晚上,读完了2016年书单的第二部书,《爱因斯坦传》。我想梳理一下自己读这本书的收获,或者说感悟!在读这...
ximenpiaoxue4016_943027965 2016-04-05 09:09
叛逆在爱因斯坦性格中的重要性(二)
叛逆在爱因斯坦性格中的重要性(二) 《爱因斯坦传》读书笔记                                四  叛逆性 在爱因斯坦的同时期科学家中,我想比他IQ...
ximenpiaoxue4016_943027965 2014-07-09 19:55
RTEMS系统时钟原理
作者,下家山(转载请注明作者及出处,请尊重原创)   专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 一:从应用看原理      每个...
ximenpiaoxue4016_943027965 2014-07-09 19:47
RTEMS在S3C2410上的移植(一)
作者:下家山(转载,请注明) 1:RTEMS开发环境建立 1.1开发环境建立前的准备工作 因为RTEMS开发环境主要用的是GNU的工具链,所以需要一台装有Linux的HOST. 1.2...
ximenpiaoxue4016_943027965 2014-07-09 19:45
深入浅出学Makefile<三,如何自动生成Makefile>
(请尊重原创,转载请注明,作者:下家山) 五: 运行make编译得到可执行文件 root@parson-desktop:/home/parson/tmp/automk# make gcc ...
我要评论
0
0
广告