Android開發高手課——模塊一 01 native崩潰異常捕獲

這篇文章主要記錄完成文哥的Android開發高手課Native層的崩潰異常捕獲作業。
開發環境:window 10
開發軟件:Android Studio 3.5.0 NDK-R16b Android 9.0(28)

NDK環境配置

先把sample導入到Android Studio,然後配置NDK環境
在這裏插入圖片描述
點擊Show Package Details查看詳細版本信息,如果CMake3.10.2的版本編譯不過則降低到3.6.4版本

查找異常相關.dump文件

編譯完成將app安裝到模擬器上,進入/sdcard/ 下查看是否有.dump文件生成,結果發現只有crashDump文件夾並沒有.dump文件
原因是NDK有GCC和Clang兩套編譯器,在Win10環境下只支持GCC編譯。
使用NDK版本得選擇r16b及以上版本。

  • 筆者系統是win10 64,下載的是android-ndk-r16b-windows-x86_64.zip
  • 然後修改AS中的NDK路徑。File>Project Structure>SDK Location
    在這裏插入圖片描述
    然後分別在sample和breakpad-build的build.gradle中添加配置:
    在這裏插入圖片描述
 externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                arguments "-DANDROID_TOOLCHAIN=gcc"
            }
        }

重新編譯打包,點擊crash,則在/sdcard/crashDump/文件下看到xxx.dump文件

Crash日誌轉換分析

  • 在sdk中的lldb中找到工具minidump_stackwalk.exe
  • cmd命令窗執行命令,生成crash.txt文件
F:\AppData\Local\Android\sdk\lldb\3.1\bin>minidump_stackwalk.exe 7d178dfd-60a6-4bbc-f502b3be-f38a77c6.dmp >crash.txt

Crash.txt中顯示異常文件信息

  • 再使用NDK中addr2line來解析so得到具體發生crash的函數所在行。
F:\AppData\Local\Android\sdk\android-ndk-r16b\toolchains\x86_64-4.9\prebuilt\windows-x86_64\bin>x86_64-linux-android-addr2line.exe -f -C -e F:\Android_advance\Chapter01-master\sample\build\intermediates\transforms\mergeJniLibs\debug\0\lib\x86\libcrash-lib.so 0x515

在這裏插入圖片描述
到此分析結束,發現是crash.cpp在第10行發生crash,然後纔回到代碼修改bug。

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