使用gdbserver远程调试
2014-08-06 17:34
375 查看
gdbserver工具
先确定默认crosstool交叉编译器是否有自带gdbserver,如果有就不需要自行编译。一般都会带有对应的gdbserver工具,可以通过find命令查找确定:hong@ubuntu:~/work/system$ which arm-none-linux-gnueabi-gcc /opt/arm-2009q3/bin/arm-none-linux-gnueabi-gcc hong@ubuntu:~/work/emrock/emrock/system$ find /opt/arm-2009q3 -name gdbserver /opt/arm-2009q3/arm-none-linux-gnueabi/libc/thumb2/usr/bin/gdbserver /opt/arm-2009q3/arm-none-linux-gnueabi/libc/thumb2/usr/lib/bin/gdbserver /opt/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/usr/bin/gdbserver /opt/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/bin/gdbserver /opt/arm-2009q3/arm-none-linux-gnueabi/libc/usr/bin/gdbserver /opt/arm-2009q3/arm-none-linux-gnueabi/libc/usr/lib/bin/gdbserver hong@ubuntu:~/work/system$
?
如果找到了就直接跳到步骤4,没有的话就需要自行编译了。
编译gdbserver
到GNU官方FTP下载, 下载地址:
http://ftp.gnu.org/gnu/gdb/
编译GDB源码时只需要编译出gdbserver就可以了
?
?
?
?
库问题
这里需要注意的是运行gdbserver还需要libthread_db库,若你自己做的文件系统内没有这个库的话需要从交叉编译器内拷一个过去。?
#strace -f -F -o strace.log gdbserver -h
#vi strace.log
发现如下字段:
872 writev(2, [{"gdbserver", 9}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libthread_db.so.1",
17}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10) = 126
872 exit_group(127) = ?
得知缺少libthread_db.so.1库(红色部分标出)。
调试过程
1)Target端建立远程调试服务# gdbserver 192.168.0.29:1234 obexftp (target)
Process obexftp created; pid = 858
Listening on port 1234
其中IP地址为用来远程调试的上位机地址(现在直接被gdbserver忽略掉,所以可以不写),端口为target TCP 监听端口。目标程序不需要符号表,即可以是strip后的,这样可以节省存储空间,所有的符号信息处理都是在Host端的gdb处完成的。
2)Host端GDB加载要调试的程序
这里要调试的程序得是交叉编译过的,并且加了-g参数。不过大部分编译程序默认就是加了-g参数的,这点可以从编译时的log看出。
?
?
连接成功后ARM板上的信息应该是这样的:
?
调试过程如下:
?
(相对与远程调试,gdb默认搜索的路径即为交叉编译器的库路径,下面我会介绍到)
因此,这里我们需要修改一下gdb默认的共享库搜索路径。
修改的办法是设置GDB的环境变量:
?
?
详细参考GDB手册中相关部分:
http://wiki.chinaunix.net/index.php/GDB_Manual_15_1
设置好solib-search-path后再运行程序:
?
注:使用GDB调试时查看代码不是很方便。CLWEN使用VIM作为GDB前端界面,结合gdb的远程调试功能,动态的将程序当前运行的代码显示在VIM上,查看起来十分方便。其远程调试方法和GDB+GDB Server一样,但是多了一个GUI界面(VIM)。
原文链接: http://my.oschina.net/shelllife/blog/167914
相关文章推荐
- TI-Davinci开发系列之五CCS5.2使用gdbserver远程调试应用程序
- Ubuntu和Mac使用gdbserver远程调试android源码
- 使用gdb、gdbserver在ARM-Linux下进行远程调试
- 在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)
- 在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)
- 使用gdbserver远程调试
- 使用gdbserver远程调试
- 【GDB】gdbserver的使用,远程调试开发板
- 【GDB】gdbserver的使用,远程调试开发板
- Android native debug: 手动使用gdbserver远程调试C代码
- 使用gdbserver远程调试
- openwrt下使用gdbserver远程调试
- 使用gdbserver远程调试
- 使用gdbserver远程调试
- 使用gdbserver远程调试
- 使用gdbserver远程调试
- uclinux使用gdb和gdbserver远程调试
- 使用eclipse+gdb进行arm板嵌入式linux远程调试的配置方法
- 使用eclipse+gdb进行arm板嵌入式linux远程调试的配置方法
- 实用技巧:Gdbserver远程调试的具体实现