如何使用arm-linux-androideabi-addr2line 如何使用arm-eabi-gdb调试android c/c 程序
如何使用arm-linux-androideabi-addr2line
1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如:
export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
2.使配置生效:source ~/.bashrc
3.使用工具。例如:arm-linux-androideabi-addr2line -C -f -e ~/workspace/DLNA/libs/armeabi/libctrlpt.so 0003deb其中,0003deb4为堆栈信息中pc的值。
android应用崩溃的调试方法
有两种方法可以分析 crash 的堆栈信息
1 google提供了一个python脚本,可以从
http://code.google.com/p/android-ndk-stacktrace-analyzer/
下载这个python脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,
使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面
把so或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm,
使用脚本
python parse_stack.py 2 直接使用NDK下面的arm-linux-androideabi-addr2line (D:android-ndk-r8 oolchainsarm-linux- androideabi-4.4.3prebuiltwindowsinarm-linux-androideabi-addr2line.exe) 例如:arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address) android调试工具addr2line使用补充 使用addr2line追踪自有动态库(so文件)的bug, 补充: 解决出现 ??:0 , 没法展示源代码行数的问题 在Android.mk 文件中: Java代码 LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wl,-Map=test.map -g 补充2个编译参数 -Wl,-Map=test.map -g . 增加gcc警告和调试标志 arm-linux-androideabi-addr2line -C -f -e /项目目录/obj/local/armeabi/libfaa_jni.so 0024362e tip: 1,注意调试文件的位置在obj目录下,并非libs目录下生成的so文件 2,0024362e 为出错的机制位置 还有: 在jni/目录下增加Application.mk 文件, 修改为debug 模式,进行调试 APP_OPTIM := debug
如何使用arm-eabi-gdb调试android c/c 程序
 
1.获取gdbserver
prebuilt/android-arm/gdbserver
2.获取arm-eabi-gdb
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
3.启动emulator(即qemu虚拟机,调式linux内核时用到)
$adb remount && adb push gdbserver /system/bin
adb shell
#gdbserver 10.0.2.2:1234 /system/bin/ping
 
$telnet localhost 555Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is ^].
Android Console: type help for a list of commands
OK
]
KO: unknown command, try help
**cmd**redir add tcp:1234:123OK
exit
Connection closed by foreign host.
$cd out/target/product/generic/symbols/system/bin && arm-eabi-gdb ping
 
(gdb) r
Starting program:  
Dont know how to run.  Try "help target".
(gdb) target remote localhost:123Remote debugging using localhost:1230xb0000100 in ?? ()
(gdb) l
1779 usage()
1780 if (argc > 5)
1781 usage()
1782 } else {
1783 if (argc > 10)
1784 usage()
1785 options |= F_SOURCEROUTE
1786 }
1787 }
1788 while (argc > 0) {