ndk调试。。

来源:互联网 发布:淘宝818开学季 编辑:程序博客网 时间:2024/05/15 04:25
缘起:

用一个播放器,播放流媒体视频时总是崩溃,不知道为何,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





===============================================================

===============================================================

.把ida 目录下android_server 传到android 目录中
如:
adb push  android_server /data/local/tmp/
adb shell 进入模拟器
cd /data/local/tmp/
chmod 755 android_server
./android_server
看到监听端口 23946

2.在windows 控制台下转发window 到模拟器或者手机的端口
adb forward tcp:23946 tcp:23946

3.ida 中选择android 调试
在Debuggger 中的process options 的
hostname 填上localhost
port: 23946

4.在Debuggger 中的attach 上android 所对应的程序就行了

如果不调so,而是调是bin的话
第3部application 填上:你bin 在模拟器或者手机的路径
Input file:同application 
Directory:你bin 在模拟器或者手机的目录路径
有参数的话,参数也填上
然后直接在第4部F9 或者start process

对于使用symbian的同学注意下:
第3部application 填上:你bin 在手机的路径
Input file:你本机电脑上的程序路径
port:com口

手机上要安装trk
注意:ida6.1 才支持android 调试,5.5 不支持

0 0
原创粉丝点击