GDB调试文档
作者:下家山
因GDB这部分我做得很不理想(不能debug module,也不能debug kernel),所以心得和调试经验就比较少。
GDB-即GNU-Project-Debugger;
我用的是gdb-6.4,官方下载地址:http://ftp.gnu.org/gnu/gdb/
官方相关文档:http://sourceware.org/gdb/current/onlinedocs/gdb_toc.html
因为我的环境是:
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 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
准备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的可执行文件
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的链接.
#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条评论)
登录后参与讨论