Android 應用程序崩潰 調試

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 0003deb4

其中,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 <asm-file> <logcat-file>

2 直接使用NDK下面的arm-linux-androideabi-addr2line 

(D:\android-ndk-r8\toolchains\arm-linux-
androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe)

例如:arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address)

 

android調試工具addr2line使用補充

使用addr2line追蹤自有動態庫(so文件)的bug, 補充:
解決出現 ??:0 , 沒法展示源代碼行數的問題

在Android.mk 文件中:

Java代碼
  1. 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
具體application.mk 文件的配置見: http://blog.csdn.net/weidawei0609/article/details/6561280

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章