程序員自我修養(yǎng)之JAVA與JNI流程以及檢測(cè)崩潰工具搭建

一、JAVA層調(diào)用C++層流程

? ?1. 在build.gradle(:app) 寫入文件配置

? ? ? a.?defaultConfig 里面加入配置參數(shù)

? ? ? b.? 在defaultConfig外面配置JNI的路徑

? ? ?2. 創(chuàng)建CMakeLists文件以及編寫.so庫(kù)

? ? ? ?CMakeList 語法參考此文檔:http://www.lxweimin.com/p/56a3fd12f76e

? ?3.Java層代碼編寫

? ? ?4.? CMakeLists生成.so庫(kù)位置

? ? 5. JNI層代碼編寫,流程已經(jīng)跑通

二、JNI層調(diào)用java層代碼

? ? ? JNI層反射和Java層反射相似

三、ASAN背景介紹

? ??????1.堆棧和堆緩沖區(qū)上溢/下溢

????????2.釋放之后的堆使用情況

????????3.超出范圍的堆棧使用情況

????????4.重復(fù)釋放/錯(cuò)誤釋放

四、把a(bǔ)san.so接入Android

? ? ? 1. gradle寫入環(huán)境變量

? ? ? ? 2. CMakeLists寫入介入三方庫(kù)使用

? ? ? ? 3. 拿到堆棧使用add2Line去解析奔潰的堆棧,即可知道問題原因

Android/sdk/ndk/16.1.4479499/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line(add2line的目錄)? -e? libnative-lib.so(崩潰的so庫(kù))? 0x704a151578? 0x704a1514d8(崩潰的堆棧)


demo: https://github.com/zhang1shun1wei/ASan_demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容