用android自带的gdb与gdbserver调试native C/C++程序

缘起:

用一个播放器,播放流媒体视频时总是崩溃,不知道为何,logcat出来的log里面,崩溃信息里面的backtrace不全,堆栈的值仅仅打印出两行,且都停留在libc库里面.因此也没有办法用arm-linux-androideabi-objdump来跟踪代码.Google上给的解决方法是用gdb调试.

参考:http://stackoverflow.com/questions/17633866/incomplete-backtrace-in-logcat


以调试mediaserver为例:

准备:

1.gdbserver运行在目标机(android设备)上,开发机(PC)上运行gdb.用gdb连上gdbserver开始调试

2.android代码版本是android4.0.3.

在android的源代码目录下.prebuilt目录中find到gdbserver: $ANDROID_SOURCE/prebuilt/android-arm/gdbserver/gdbserver

然后将gdbserver 给adb push 到目标机上,比如:

先在android目标机上建立/data/bin目录,将gdbserver给push到/data/bin下

$adb push $ANDROID_SOURCE/prebuilt/android-arm/gdbserver/gdbserver /data/bin

3.目标机端:

$adb shell

$cd data/bin

然后连接gdbserver:

gdbserver 开发机IP:端口 应用程序名或者(--attach 进程号)

$gdbserver 192.168.10.166:1234 --attach 1168

或者:

$gdbserver 192.168.10.166:1234 /system/bin/mediaserver


开发机端:

1.将上述1234端口的TCP通过adb都转到目标机上:

$adb forward tcp:1234 tcp:1234


2.运行gdb.注意gdb与gdbserver的版本要一致,可以用gdbserver --version查看版本,gdb在运行时也能看到版本打印,两者一致.

同样,在android源代码之prebuilt目录下找到相应的arm-eabi-gdb

我们可以看到在prebuilt目录下有很多相关的gdb,因为是在ubuntu下开发,选择linux下的,且版本与gdbserver版本一致的arm-eabi-gdb

$($ANDROID_SOURCE)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gdb   $ANDROID_SOURCE/out/target/product/nusmart3_stick/symbols/system/bin/mediaserver


3.给gdb设置库的查找路径

(gdb) set solib-absolute-prefix $ANDROID_SOURCE/out/target/product/nusmart3_stick/symbols/system/lib

(gdb) set solib-search-path $ANDROID_SOURCE/out/target/product/nusmart3_stick/symbols/system/lib


4.连接gdbserver:

(gdb) target remote 目标机IP:端口

如:

(gdb) target remote 192.168.10.104:1234


参考:

http://www.kandroid.org/online-pdk/guide/debugging_gdb.html

http://laokaddk.blog.51cto.com/368606/1162260

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值