超簡單的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,之後生成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

 

最後推薦一個很有用的android官方網站http://tools.android.com/ 這個網站包含大多數ADT使用方法和新版ADT的介紹,獲益匪淺

關於如何使用ADT進行ndk單步調式就在http://tools.android.com/recent/usingthendkplugin


只可惜這種方法只能在ndk環境下使用,如果要對framework中的jni進行單步調試,應該就行不通了,推薦的一種方法是把它在NDK中編譯調試完畢,然後將生成的so放在system/lib下

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