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代碼
- LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wl,-Map=test.map -g
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
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的值。