我正在將一個複雜的C應用程序移植到Android上,作爲一個SO庫,它包裝着一層薄薄的java層。 經過幾個小時的麻煩,我有Android下的代碼編譯,但當然,應用程序崩潰:但當然,應用程序崩潰:(調試Android NDK,在windows下
環顧四周後,我明白在Android下調試C應用程序的唯一方法是由gdb。 「T有很多使用gdb的經驗,任何一個在那裏可以分享一些見解?
任何人有windows下:)對GDB的教程?
THX
我正在將一個複雜的C應用程序移植到Android上,作爲一個SO庫,它包裝着一層薄薄的java層。 經過幾個小時的麻煩,我有Android下的代碼編譯,但當然,應用程序崩潰:但當然,應用程序崩潰:(調試Android NDK,在windows下
環顧四周後,我明白在Android下調試C應用程序的唯一方法是由gdb。 「T有很多使用gdb的經驗,任何一個在那裏可以分享一些見解?
任何人有windows下:)對GDB的教程?
THX
的最新版本NDK的(我用R7C),就可以構建調試版本由
android:debuggable="true"
標誌<Application>
標籤在AndroidManifest.xml
ndk-build
與NDK_DEBUG=1
(NDK_DEBUG標誌不是必要的,如果在運行使用UNIX殼NDK-建立)在Windows上,事情變得有點棘手,因爲使用ndk-gdb
,你還是需要的bash(或Cygwin的)作爲NDK R7C的,但ndk-build
在Cygwin的bash的運行會遇到權限問題,如果你曾經使用任何預構建的靜態庫
我的Windows機器的解決方案是
android:debuggable="true"
標誌<application
標籤在AndroidManifest.xml
(與上述相同)ndk-build
與NDK_DEBUG=1
ndk-gdb
對本地so庫的快速初步調查,創建一個簡單的活動有一個按鈕來觸發庫入口函數和loadLibrary
的活動,如:
class MyActivity extends Activity {
static {
System.loadLibrary("mylibrary");
}
/* other functions like onCreate, etc... */
public native void libfunc();
public void onClick(View v){
libfunc();
}
}
所以當gdb
開始,問題庫實際上已加載,但在程序崩潰之前,您仍然可以有時間設置中斷點等;當你完成設置調試器,在(gdb)
提示,鍵入continue
(或只是'c
'),然後點擊按鈕開始崩潰的程序和快樂調試...
不錯,但我不能訪問它: ( – Noam 2010-07-14 06:05:57
@ognian你的帳戶與鏈接被暫停......大聲笑我也不知道這個問題的答案,因爲我跟着asnwers鏈接,發現解決方案也沒有工作。 – JPM 2011-12-07 16:28:35