Android 各种调试方法

来源:互联网 发布:linux服务器运维 编辑:程序博客网 时间:2024/06/10 05:17
1.驱动调试:printk。
2.JNI调试:LOG
mk文件中添加LOCAL_LDLIBS:=-llog
cpp文件中添加
#include <android/log.h>
#define TAG "gps-jni"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG,,__VA_ARGS__)
代码里这样调用:
LOGD("number is %d",number);
 
调试时,电脑端输入:adb logcat -s gps-jni
就过滤输出我定义的TAG的LOG了。
3.gdb 调试
打开第一个窗口:
$ ps    查找需要附着的线程ID
$ /system/xbin/su    进入root模式
# /system/bin/gdbserver :5039 --attach 1805     手机启动gdbserver,5039,随便一个空闲端口,1805,要附着的线程ID。
这个窗口的任务完成了。
打开第二个窗口:
adb forward tcp:5039 tcp:5039    映射主机、手机端口。
./prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi-gdb ./out/target/product/xxx/system/bin/app_process    主机启动gdb。
其中 arm-eabi-gdb 是 android 工程自带的工具,工程编译后会生成 app_process。
(gdb) set solib-absolute-prefix /home/myname/work/projectname/out/target/product/xxx/symbols
(gdb) set solib-search-path /home/myname/work/projectname/out/target/product/xxx/symbols/system/lib
(gdb) target remote :5039
Remote debugging using :5039
warning: Could not load shared library symbols for 3 libraries, e.g. libeden_log.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Breakpoint address adjusted from 0x4006dc01 to 0x4006dc00.
epoll_wait () at bionic/libc/arch-arm/syscalls/epoll_wait.S:10
10        mov     r7, ip
(gdb) b xxx::yyy::zzz
(gdb) c
(gdb) quit
 
gdb 可以用脚本启动:
./prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi-gdb -x init.gdb
init.gdb:
file out/target/product/xxx/system/bin/app_process
dir /home/myname/work/projectname #工作目录
shell adb forward tcp:5039 tcp:5039 #映射主机、手机端口
#以下两条命令设置符号表路径,动态库路径,注意需要绝对路径
set solib-absolute-prefix /home/myname/work/projectname/out/target/product/xxx/symbols
set solib-search-path /home/myname/work/projectname/out/target/product/xxx/symbols/system/lib
target remote :5039 #指定手机端 gdbserver 监听的端口号
b xxx/xxx/xxx.cpp:1689
0 0
原创粉丝点击