1. 程式人生 > >使用android studio進行ndk開發時如何定位crash錯誤

使用android studio進行ndk開發時如何定位crash錯誤

使用android studio進行ndk開發時如何定位crash崩潰錯誤
這裡寫圖片描述

在ndk開發時, jni層的程式碼一旦出現問題, 就會列印如下資訊, 然後直接閃退, 這時候讓人非常抓狂, 只能過在各個jni函式中列印日誌來跟蹤問題,但是效率實在是太低,碰到有多執行緒的時候很難定位到問題.

網上搜索到的定位ndk崩潰的文章都是使用eclipse來舉例的, 編譯時產生的so檔案儲存在obj/local/armeabi/目錄下, 但是使用android studio進行開發的話根本沒有obj/local/armeabi/這個目錄.

因此本篇文章就來介紹下如何在android studio下來定位ndk崩潰

  1. 首先我們要先把Logcat裡的show only selected application選項改成No Filters(紅框1), 這時就能看到系統打印出的DEBUG資訊.
  2. 在DEBUG資訊裡找到backtrace(紅框2), 這段就是系統給出的造成崩潰的資訊, 但僅僅給出了是哪個函式, 而沒有準確給出是那一行程式碼造成的崩潰.
  3. 記下#00 pc 00013122(紅框3)這個資訊, 這個資訊就是用來定位崩潰程式碼的地址

這裡寫圖片描述

想要準確定位崩潰程式碼的地址的話我們就需要用到ndk工具包裡的adrr2line這個工具了

  1. 首先先找到這個工具, linux系統這個工具在如下位置
/home/gavinandre/Documents/Android/android-sdk
-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line

在該目錄下做個軟連結後就能在任何目錄使用這個命令了

sudo ln -s arm-linux-androideabi-addr2line /usr/local/bin/addr2line
  1. 找到造成崩潰的so檔案地址, 在app目錄下搜尋so檔案
$ find -name "libsocket_camera-lib.so"

./build/intermediates/bundles/debug/jni/armeabi-v7a
/libsocket_camera-lib.so ./build/intermediates/bundles/default/jni/armeabi-v7a/libsocket_camera-lib.so ./build/intermediates/cmake/release/obj/armeabi-v7a/libsocket_camera-lib.so ./build/intermediates/cmake/debug/obj/armeabi-v7a/libsocket_camera-lib.so ./build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so ./build/intermediates/transforms/mergeJniLibs/debug/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so ./build/intermediates/transforms/stripDebugSymbol/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so ./build/intermediates/transforms/stripDebugSymbol/debug/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so

可以看到android studio編譯後生成了許多so檔案, 以我的經驗正確的so檔案一般是這個檔案:build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so

然後就可以使用addrline命令了, 格式是addr2line -e 檔案位置 崩潰地址(紅框3: 00013122)

addr2line -e build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so 00013122

如果so檔案正確的話會列印如下資訊,socket_camera.cpp就是崩潰的cpp檔案, 304就是行數, 然後檢查下定位出來的位置是否在DEBUG資訊裡給出的函式裡(紅框4)

/home/gavinandre/Documents/Workspace/AndroidStudioProject/DisinfectionRobot/nvadtslibrary/src/main/cpp/nvadts/video_engine.cpp:304

如果so檔案錯誤的話會列印問號或者一個不對的位置, 這時就要換so檔案多嘗試了

??:?

相關推薦

使用android studio進行ndk開發如何定位crash錯誤

使用android studio進行ndk開發時如何定位crash崩潰錯誤 在ndk開發時, jni層的程式碼一旦出現問題, 就會列印如下資訊, 然後直接閃退, 這時候讓人非常抓狂, 只能過在各個jni函式中列印日誌來跟蹤問題,但是效率實在是太低,碰到有多

使用Android Studio進行NDK開發

ndk開發 開發 ews ret split c++基礎 ndk 給定 註意 Step1:創建native方法 很easy,僅僅須要給定義好的方法加上native關鍵詞就可以 註意:由於該方法的詳細實現是在c++中詳細實現的。所以相似於接口方法不

Android Studio 進行NDK開發入門

一.開發前準備 Android Studio 最好升級到2.2 Jdk1.7 api24 Gradle2.2.2 二.下載NDK和cMake 三.配置

使用Android Studio進行NDK開發和除錯(gradle-experimental之官方文件的翻譯說明)

版本更新 環境要求 Gradle(參照三裡邊的版本要求) Android NDK r10e Build Tool在19.0.0以上的SDK Gradle版本要求 不同版本的Experimental Plugin需要不同版本的gradle

android studio 進行ndk/jni開發

一、前言:之前用eclipse開發ndk的時候大家是不是很痛苦,要做的事情很多:     //NDK開發流程:      1、在java程式碼中 宣告本地方法(native)     2、通過javah工具完成jni樣式的標頭

Android studioNDK開發(一)——使用CMake構建NDKDemo

一、前言 NDK可以支援使用C/C++來編寫Android程式,不但可以接入C/C++中優秀的庫資源,而且處理效率高,在音視訊方面有著廣泛的應用。本篇主要以CMake的方式來構建NDK,主要以最常規的方式建立一個NDKImportDemo,並對自動建立官方例子進行分析構建的過程以及CMakeLi

Android StudioNdk開發踩過的坑以及解辦法決

 Android studio在2.2之後是開始相容ndk的開發,嚐鮮用來本地開發,各種坑,不相容。之前用得好好的,一個升級AS或者NDK版本都會一不小心導致了編譯失敗,或者成功之後,載入不成功。故隨手筆記記錄下自己踩過的坑,也方便其他人查詢。 Trap One :

Android studioNDK開發(一):CMakeLists.txt編寫入門

自定義變數 主要有隱式定義和顯式定義兩種。  隱式定義的一個例子是PROJECT指令,它會隱式的定義< projectname >_BINARY_DIR和< projectname >_SOURCE_DIR兩個變數;顯式定義使用SE

windows下 android studioNDK開發環境配置(1)(2)

參考博主文章連結: 開發環境:  windows10  AS2.1.2 首先安裝NDK,  安裝完後,新建一個空專案。    點選下一步,知道新建一個新專案。 新建好的專案如下:  檢測local.properties 檔案裡面是否有ndk的路徑,沒有加上。

Android Studio新增NDK開發能力的兩種方法

第一種方法:新建的專案(new project)的時候使用Include C++ Support選項 第二種方法:使用外掛(Plugin)-- Experimental Plugin 這裡我演示一下,瞭解具體內容請科學上網,去檢視詳情 試驗環境: java jdk

Android StudioNDK開發環境搭建

目標 由於要涉及到音視訊的開發,所以要用到JNI,之前一直用AS2.0的,發現用這個做NDK開發太麻煩了,後來看到動腦學院老師的一個教學視訊,android studio的NDK開發配置,做了一個學習筆記,視訊可以百度搜索的到。 配置要求 Android

Android Studio進行NDK程式設計入門例項

參考了網上各種教程,跌跌撞撞最終才把流程走通,特此記錄一下:有必要先交代下開發環境:作業系統:Win7Android Studio 3.0.1gradle 3.0.1首先,新建一個Android專案,然後在MainActivity的佈局檔案activity_main.xml檔

Android StudioNDK開發之 用javah生成標頭檔案

作為一個Android開發初學者,之前一直是用C++在寫程式,最近需要開發一個APP,不得不開始學習java以及學習使用AS進行Android開發。 因為從C++轉過來的,想省點力氣從學習NDK開發入手,可是一天下來,走到javah生成標頭檔案這步卻怎麼也走不動了,看了很多

Android Studio 配置build-scan精確定位Build錯誤

最近在使用Dagger2依賴注入時,每次Build總是失敗。 但是控制檯顯示的錯誤卻是這樣的: 看到這樣的錯誤提示,立刻感覺十分頭大,無從入手。 各種百度後瞭解到有個gradle build-scan

Android Studio進行NDK開發的一般流程

1 在類中宣告native方法 2 在 app/src/main 下建立 jni 目錄 3 在 app/src/main/java 下執行命令 javah -jni -d ../jni com.path2class.ClassName 4 在 app/src/main/jni

Android移動開發01----用Android Studio進行開發

    一直以來都用Eclipse進行開發,但是最近發現Eclipse執行越來越緩慢,再加上自己的電腦已入暮年,時不時卡頓一下實在讓人受不了。在開發Ruby的時候接觸了RubyMine,一個基於IntelliJ IDEA的IDE,功能強大,速度比較快。於是決定拋棄Ecl

android studiondk C++開發

1、下載NDK(Native Develop Kit)交叉編譯工具,解壓NDK開發工具集,隨便哪裡都行,看你自己的習慣,但是還是要自己知道,別什麼時候不知不覺刪了,然後開發JNI始終不行,怎麼都找不到錯誤,那就杯具了。 2、在 local.properties

使用Android Studio與Eclipse開發NDK的對比

最近開發的一個專案中用到了JNI,所以針對Android的兩大IDE開發NDK做了一下對比。 Android Studio開發NDK的配置 我使用的是穩定版的2.0的外掛,預設情況下它是不支援NDK的,即如果你在build.gradle中配置了ndk屬性

Android Studio配置CMake開發NDK

1.在SDK Tools中勾選安裝CMake、LLDB、NDK 2.配置一些快捷方式 引數講解 javah 用於生成標頭檔案 Program:$JDKPath$/bin/javah Parameters:-d

Android studio 配置NDK開發例項

7. 編譯so庫檔案此時,在Terminal視窗中執行ndk-build,就可以得到編譯的so檔案。$ ndk-build Android NDK: WARNING: APP_PLATFORM android-14 is higher than android:minSdkVersion 1 in ./And