实现Android-JNI本地C++调试
1. ????? 原文鏈接:NDK單步調試方法
???????如有問題或者版權要求,請拜訪原作者或者通知本人.
最近為了性能需求,開始搞JNI,白手起搞真心不容易。中間差點崩潰了好幾次,最終總算得到一點心得。
JNI對性能的提升沒有我預想中的大,對于for循環的速度提升大概在1倍左右,所以如果數量級不大的話,性能提升不會很明顯
JNI編完之后,不能調試,是不是很蛋疼,不像android Java可以看出錯信息。JNI crash之后,界面上表示為沒有任何反應,過段時間直接退出應用,沒有提示、也沒有XXX已停止運行。第一次遇到真是無從下手,有沒有!!!,經過對Java層的log研究發現,原來JNI crash后,cpu就直接死在那里(相當于assert,程序停止運行)。果斷時間后JAVA層發現程序已掛之后(進程僵死),就強制殺死該進程。于是程序直接退出而無提示。(以上分析純屬個人分析,如有不對,敬請指正)。這時發現如果能有單步調試功能那該多好!!
?
?百度一下 ndk單步調式 一般能搜出如下結果:
1、安裝CDT插件
2、安裝Sequoyah插件
3、使用插件裝入JNI文件、導入JNI頭文件
4、配置eclipse JNI編譯環境
5、修改ndk-gdb腳本
6、運行ndk-gdb腳本,并修改生成的文件(windows需安裝cygwin)
7、配置eclipse native調試環境
嚇尿了,有沒有!!!單步調試這么麻煩!!!麻煩不說,windows下使用ndk-gdb效率還特別低
?
另外,對于修改google release的ndk腳本,我一直持保留態度,安說release的腳本應該直接能用的,為什么要做修改后才能用呢?
?
以上步驟,我花了2~3小時搞定,僅僅為了能打個斷點~~~
?
在機緣巧合下,我看到一篇google官方的文章“Using NDK Plugins”
令人興奮的是,ADTr20已經支持JNI單步調試,再也不需要如上這么麻煩的步驟了
你現在需要做的只需以下2步:
1、使用ndk-build編譯時,加上如下參數NDK_DEBUG=1 V=1,之后生成so文件之外,還會生成gdbobserver,gdb.setup調式文件
2、在項目的Debug Configuration中選擇Android Native Apllication,點擊下方Debug
3、Enjoy your Debugging!
?
如何?是不是超簡單,而且調試速度還相當快哦
?
ADTr20已經比較完美支持NDK開發了。可以集成ndk編譯,只需在項目右鍵Add Native Support,就能自動生成jni文件,并部署編譯環境(注意這個過程是不可逆的,手動刪除jni文件后,會編譯不過)。如果需要生成NDK調試文件,需要右鍵項目->properties->C/C++ build->Builder Setting 把默認的Build Command : ndk-build 修改成 ndk-build NDK_DEBUG=1 V=1
?
最后推薦一個很有用的android官方網站http://tools.android.com/?這個網站包含大多數ADT使用方法和新版ADT的介紹,獲益匪淺
關于如何使用ADT進行ndk單步調式就在http://tools.android.com/recent/usingthendkplugin
只可惜這種方法只能在ndk環境下使用,如果要對framework中的jni進行單步調試,應該就行不通了,推薦的一種方法是把它在NDK中編譯調試完畢,然后將生成的so放在system/lib下
文章補充:
???????若出現?找不到ABI 的問題,測可能是?目標平臺沒有對齊,統一一下.
???? ? 參考:http://stackoverflow.com/questions/18245867/getting-unknown-application-abi-when-trying-to-debug-some-c-code-in-my-android
???????????????? http://stackoverflow.com/questions/20047348/unknown-application-abi-while-debug-as-native-application
It was apparently due to the subliminal message shown between the Unknown Application ABI lines. So I added
APP_PLATFORM := android-10to my Android.mk, and it works.
2. 在工程右鍵 屬性--C/C++Build-build setting
???????????ndk-build? 修改為 ?ndk-build NDK_DEBUG=1 V=1
總結
以上是生活随笔為你收集整理的实现Android-JNI本地C++调试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是adsl服务器,如何连接
- 下一篇: C++多个文本读取问题