Android下用GDB调试.so的方法


Android下开发程序我一直认为是一件非常恶心的事情,特别是JNI开发,(或许是本人水平太差了)反正从以往来看,嵌入式开发中的调试都是一个难点。基本上都是一台主机比如Linux,然后另外的嵌入式平台,通过类似于TCP连接的东西,传输调试信息。


关于Android调试,网上有很多的文章, 但是我个人总觉得不是非常地好理解。

所以这里介绍一个例子,希望能对大家有所帮助。例子来源于Qgis工程,这是一个开源软件。这里面有一个用于debug的脚本,参考https://github.com/qgis/QGIS-Android/blob/master/scripts/debug-apk.sh

但是这个还挺麻烦的,不是太好理解。

OK我把里面的脚本搞出来:

/home/along/necessitas/android-sdk/platform-tools/adb shell am start -n org.qgis.qgis/org.kde.necessitas.origo.QgisActivity

/home/along/necessitas/android-sdk/platform-tools/adb pull /system/bin/app_process /home/along/src/qgis/qgis-android/tmp/app_process
/home/along/necessitas/android-sdk/platform-tools/adb pull /system/bin/linker /home/along/src/qgis/qgis-android/tmp/linker
/home/along/necessitas/android-sdk/platform-tools/adb pull /system/lib/libc.so /home/along/src/qgis/qgis-android/tmp/libc.so
echo `/home/along/necessitas/android-sdk/platform-tools/adb shell top -n 1 | grep org.qgis.qgis`
第一步就是启动Android上的程序 org.qgis.qgis

第二步把上面的一些文件给拉下来,用于调试

第三步找到org.qgis.qgis的进程ID号,在下面有用


/home/along/necessitas/android-sdk/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/org.qgis.qgis/debug-pipe

/home/along/necessitas/android-sdk/platform-tools/adb shell run-as org.qgis.qgis /data/data/org.qgis.qgis/lib/gdbserver +debug-pipe --attach PID &

/home/along/necessitas/android-9-standalonetoolchain/bin/arm-linux-androideabi-gdb -x /home/along/src/qgis/qgis-android/tmp/gdb.setup

再看,
第四步,启动调试桥
第五步,attach PID, 这个地方注意, 执行的时候,把PID换成上面查找出来的进程ID号。后面的 & 不能少指的是运行后转入后台。
第六步,让gdb执行一些命令,命令文件/home/along/src/qgis/qgis-android/tmp/gdb.setup如下所示:

file /home/along/src/qgis/android/tmp/app_process
target remote :5039
set solib-search-path /home/along/src/qgis/android/apk/libs/armeabi-v7a
directory /home/along/android-ndk/android-9-standalonetoolchain/sysroot/usr/include /home/along/src/qgis/master/src /home/along/src/qgis/android/src
break QgisApp::QgisApp


这个其实就是指定让gdb去哪些目录下搜索调试中用到的.so库文件,以及.cpp所在的路径。
然后在QgisApp这个类的构建函数停下来。


如果软件出了bug挂了,然后执行backtrace 回退查看函数调用堆栈。

如果软件刚开始就挂了,还是看LOG吧。

看LOG的方法,可以用eclipse,也可以用以下的脚本:里面定义了一些变量,请把他变成你需要的

set -e


ADB=<span style="font-family: Arial, Helvetica, sans-serif;">/home/along/necessitas/android-sdk/platform-tools/adb</span>

$ADB kill-server
$ADB devices

echo "" > /tmp/logcat.log
gnome-system-log /tmp/logcat.log &
$ADB logcat -c


$ADB shell am force-stop org.qgis.qgis
$ADB shell am start -n org.qgis.qgis/org.kde.necessitas.origo.qgisActivity
$ADB logcat | tee /tmp/logcat.log



参考:

http://blog.chinaunix.net/uid-24439730-id-357096.html

 Android系统中调试动态链接库so文件的步骤

http://www.360doc.com/content/12/1114/19/10388890_247863542.shtml

http://blog.csdn.net/eqera/article/details/20230671
 Android中用gdb调试一启动就崩溃的程序:
http://blog.csdn.net/jinzhuojun/article/details/7393573

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值