用ndk-stack定位NDK開發中.so文件報錯信息

ndk開發中so導致的應用crash很隱祕,在logcat中不明顯,所以令開發者手足無措,這裏介紹ndk自帶的ndk-stack,它可以dump對應的crash信息

在這裏插入圖片描述
首先你要長期使用這個工具的話我建議直接先把…\ndk-bundle添加到環境變量。

接下來我們來模擬一個c++空指針

在這裏插入圖片描述
當我們在app中調用這個方法的時候,由於env指針爲 NULL 程序會掛掉,但是查看logcat會有以下信息
在這裏插入圖片描述
從上圖可以看出是x86下的libnative-lib.so報的錯,所以我們打開終端,如下

adb logcat | ndk-stack -sym app/build/intermediates/cmake/debug/obj/x86

在這裏插入圖片描述

  1. adb logcat是查看log的操作
  2. | ndk-stack -sym;“|” 不能少,-sym是固定參數
  3. app/build/intermediates/cmake/debug/obj/x86 這裏必須是編譯時的build的目錄,並且是含有obj目錄的那個,pc模擬器基本都是x86的abi,真機的話就是arm的比較多,還有我這用的cmake編譯的so,所以會有一個cmake目錄層級;低版本(2.2)中這個文件一般有個ndk目錄,如app/build/intermediates/ndk/debug/obj/x86 4. 執行這行命令後就可以找到對應的報錯位置

另外還可以通過-dump參數將存在文件中的log進行處理

adb logcat > crash_log.txt | ndk-stack -sym app/build/intermediates/cmake/debug/obj/x86 -dump crash_log.txt
  1. adb logcat > crash_log.txt 輸出log到文件
  2. -dump crash_log.txt分析log文件,找到問題所在
    具體的操作可以參考官方文檔,…\ndk-bundle\doc目錄下有對應文檔,可以用火狐瀏覽器在脫機模式下打開查看

拓展。。。c調用java的時候,java方法報錯,程序不會立刻崩潰,這時候需要在c層對異常捕獲

在這裏插入圖片描述

總結

掌握了使用這個工具以後,不管ndk開發中遇到什麼問題,都可以快速定位問題所在,管他空指針還是數組越界。

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