Android jni Crash堆棧資訊分析

來源:互聯網
上載者:User

標籤:

如何定位Android NDK開發中遇到的錯誤

    NDK編譯產生的.so檔案作為程式的一部分,在運行發生異常時同樣會造成程式崩潰。不同於Java代碼異常造成的程式崩潰,在NDK的異常發生時,程式在Android裝置上都會立即退出,即通常所說的閃退,而不會彈出“程式xxx無響應,是否立即關閉”之類的提示框。

    NDK是使用C/C++來進行開發的,熟悉C/C++的程式員都知道,指標和記憶體管理是最重要也是最容易出問題的地方,稍有不慎就會遇到諸如記憶體無效訪 問、無效對象、記憶體泄露、堆疊溢位等常見的問題,最後都是同一個結果:程式崩潰。例如我們常說的null 指標錯誤,就是當一個記憶體指標被置為空白(NULL)之後 再次對其進行訪問;另外一個經常出現的錯誤是,在程式的某個位置釋放了某個記憶體空間,而後在程式的其他位置試圖訪問該記憶體位址,這就會產生無效地址錯誤。 常見的錯誤類型如下:

初始化錯誤;
訪問錯誤;
記憶體泄露;
參數錯誤;
堆疊溢位;
類型轉換錯誤;
數字除0錯誤。

1、第一種方法:ndk-stack
adb shell logcat|ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

或者先擷取日誌再分析
adb shell logcat > log.txt
ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -udmp log.txt

2、第二種方法:使用addr2line和objdump命令
這兩個方法可以揭示ndk-stack命令的工作原理是什麼

arm-linux-adnroideabi-addr2line -e obj/local/armeabi/*.so地址   :定位行數
arm-linux-adnroideabi-addr2line -f -e obj/local/armeabi/*.so地址 :定位函數資訊

3、第三方SDK

TestFlight——完美的iOSapp測試方案:http://onevcat.com/2012/01/testflight/

國外的crittercism
國內的TestinTestin:收費
TestFlight——完美的iOS app測試方案

崩潰報告類:
Crittercism 個人用了一段時間,表現很穩定,但是版本更新時設定比較麻煩
Crashlytics 相當優雅方便,最近被Twitter收購。十分推薦

使用者行為統計類:
Flurry 這個太有名了,不多說了
Countly 好處是輕量開源,資料可以自己掌控

Bugsense

但是在“發布前”測試分發這個環節上,基本還沒有出現能與TestFlight相匹敵的服務出現,因此如果有這方面的測試需求的話,TF依然是開發人員的首選。

Android jni Crash堆棧資訊分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.