addr2line定位so庫crash位置信息

找到NativeCrash的關鍵堆棧信息

需要注意兩個關鍵信息:

  • 發生crash的so文件名
  • 發生crash的內存地址

以下爲截取的NativeCrash的關鍵日誌信息示例:

native: #00 pc 002da1d3  /system/lib/libart.so 
native: #01 pc 0036f6ab  /system/lib/libart.so
native: #02 pc 0036be4d  /system/lib/libart.so
native: #03 pc 00029034  /data/app/xxx==/lib/arm/[你的so文件名].so 

找到 addr2line 的位置

[你的NDK的絕對路徑]/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/
目錄下,爲方便使用可配置環境變量。

我這邊是直接在zsh裏配置的別名:

  • vi ~/.zshrc
  • 結尾添加別名配置:
    alias addr2line="[NDK的絕對路徑]/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line"
    
    
  • source ~/.zshrc 使配置生效

找到 crash-so 的位置

根據堆棧信息確定crash發生在哪個so文件中,並於
[你的工程目錄的絕對路徑]/[你的module名稱]/build/intermediates/cmake/debug/obj/armeabi-v7a/
目錄中找到該so文件。

執行 addr2line 指令

// 已配置別名(0x1d7ff0用你的crash-address代替)
addr2line -f -e [你的工程目錄的絕對路徑]/[你的module名稱]/build/intermediates/cmake/debug/obj/armeabi-v7a/libffmpeg-invoker.so 0x1d7ff0

// 未配置別名
[NDK的絕對路徑]/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line -f -e [你的工程目錄的絕對路徑]/[你的module名稱]/build/intermediates/cmake/debug/obj/armeabi-v7a/libffmpeg-invoker.so 0x1d7ff0

介紹上面使用 addr2line 時兩個被使用的 option

  • -f --functions Show function names,顯示當前行所在的函數名稱
  • -e --exe= Set the input file name (default is a.out),該option後面需要跟隨分析的so文件全路徑
  • 其他option可運行 addr2line --help 自行查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章