編輯:Android開發環境
這段時間把cocos2d-x 3.4的一個測試工程編譯到Android手機上時,總出現在C++層一些莫名的錯誤,所以想調試一下到底是哪裡出了錯,用的工具是Eclipse+ADT+CDT,最後也沒弄成功,就把問題貼在這:http://www.cocoachina.com/bbs/read.php?tid=294829&page=e&#a,如果有朋友用Eclipse調試成功的,請分享一下。
沒成功,就只能找其他方法了,終於在StackFlow上找到相關的信息:http://stackoverflow.com/questions/24334080/how-to-debug-cocos2d-x-3-native-code-on-android-device,而且信息已經比較健全了,在貼的最後提問者Narek把自己的總結也貼出來了。提問這位仁兄也是蠻不容易,用超過20天來解決這個問題,可見cocos2d-x提供的技術文檔也是不夠完善的,我也得好好感謝裡面的兩位Narek和Vikas Patidar。好吧,閒話到這,我們來看看,用ndk-gdb工具怎麼調試。
一、確保cocos編譯環境沒問題
1、這個cocos自身已經做得非常自動化,在cocos引擎文件夾下雙擊一個setup.py,設置好ANDROID_SDK_ROOT,NDK_ROOT,ANT_ROOT基本就可以建立好編譯環境,當然別忘了setup是用python來運行的。還用不懂就到網上找或者看cocos目錄下的README.md文件。
2、這裡最好把NDK路徑加入到環境變量的系統路徑(即Path環境變量中)。因為本文會頻繁用到ndk-build和ndk-gdb.py(和ndk-gdb同個東西,但是也有點點區別,下文會提及)命令,把ndk路徑加入到系統路徑中也是為了好調取這兩個命令。
二、修改Android工程文件
這些操作都在proj.android文件進行
1、Jni文件夾下Android.mk修改這不用說,把自己工程要編譯的寫上去。
2、確認自己Android調試機的系統版本,從而確認自己API代號,如Narek的貼中所說, 調試機是Android 2.3.3,那麼它的API代號就是android-10,我的機器是4.03,那麼API就是android-15,這個代號可以從ADT的Andoird SDK Manager工具確認。得到這個值之後,修改一下project.properties文件,把裡面的XX修改成你的測試機的代號。
XML/HTML代碼修改這個還不夠,還有一個地方就在AndroidManifest.xml中:
XML/HTML代碼把minSdkVersion項也改成調試機代號,不然一會執行ndk-gdb.py就出現以下錯誤:
XML/HTML代碼這個項可以等你調試沒啥問題了,把它設置回來。
三、編譯和運行工程
1、打開Windows的cmd、或者Linux的shell,轉到你工程目錄下
2、編譯工程,我這采取Narek的命令行,如果不懂cocos命令行的,參考http://blog.csdn.net/luyafei_89430/article/details/38442391
XML/HTML代碼看有沒有編譯成功,到我寫完文章,都沒有出錯過,所以有出錯疑問,可以先檢查一下cocos的環境設置,再留到評論裡探討探討。
3、把工程運行到調試機上,也是Narek的命令行
XML/HTML代碼四、開始調試
1、打開Windows的cmd、或者Linux的shell,轉到你工程目錄的proj.android下
2、執行ndk-gdb.py命令(如果提示命令不存在,那就是你NDK在系統路徑(path)中沒設好,請自行檢查)
NOTE:Narek用的是ndk-gdb命令,但是我後來(之前我一直也是用ndk-gdb)發現如果用ndk-gdb進入調試,會出現下方的錯誤:
XML/HTML代碼查詢了一下,說得用ndk-gdb.py就沒問題。
當然如果所用環境都搭建好了,不會出錯。但是這裡ndk-gdb.py還有很多命令參數,會導致啟動失敗,所以我也就介紹自己由於命令參數沒設好導致的失敗。
首先是--adb參數,這個參數是指定adb命令的路徑。因為真機調試需要用adb命令來連接手機,所以這個參數是必須的。如果你在系統路徑中已經指定了他的路徑,那這裡不加入這個參數也可以。但如果出現以下錯誤,你就必須去指定你的adb位置或修改你的路徑
XML/HTML代碼這個命令的路徑一般是Android的sdk目錄中的platform-tools下,我這邊的指定如下(windows環境下):
XML/HTML代碼這個命令很常見,很多應用都有它的存在,就是要用它來連接手機,獲取一些信息。
第二命令是--nowait參數。因為缺少jdb調試命令,出現的錯誤為:
XML/HTML代碼我們這裡只要調試C++代碼就可以,所以不用jdb,直接加上這個參數就可以了。不過有jdb的話,會有更多的信息。
第三個命令是--force。有時候我們可能有兩個調試窗口調試應用,但是調試值允許一個窗口操作,另外一個窗口就調試不了,那此時這個命令就器作用,強制結束另外一個窗口的調試,直接用當前窗口調試。反正這個命令就是強制結束相同應用的進程。出錯信息為:
XML/HTML代碼第四個命令是可選的,--verbose,可以打印你工程的信息,調試信息,是非常有用的(之前說它沒用,真虧待了它)。
第五個命令就是--launch。launch指定了應用入口的Activity,比如cocos2dx-3.4版本入口Activity是org.cocos2dx.cpp.AppActivity(我之前寫錯了,不是指定包的名字,sorry)
第六個命令把我害得最苦的,--start。先說說它的用法:這個命令是直接啟動應用的命令,它自動幫你指定了入口的Activity。如果不在其目錄下,啟動不了。一般用這個命令就可以啟動程序了,但是,我發現在cocos用著命令會發現一個奇怪的問題,必須指定入口Activity而且這個問題非常隱蔽,我也是用--verbose才看出問題(所以才說它有用)。我用這個命令一直出現以下的錯誤:
XML/HTML代碼結果我用--verbose,看到了以下信息
XML/HTML代碼這。。。。,入口函數裡面多了個點(Found first launchable activity: .org.cocos2dx.cpp.AppActivity)。我想爆粗口:@#¥%#。我不知道怎麼解釋這個問題。。,所以我在這必須指定入口Activity了。
其他的命令我也沒一一去研究,畢竟可以達到調試目的就可以了。
最終我的命令就是(懶人可以復制修改):
XML/HTML代碼NOTE:這裡一個錯誤(我沒遇到過)要提一提。回到Narek的文章中,Narek執行了ndk-gdb後出現這樣子的錯誤:
XML/HTML代碼自己覺得這個有點像第二大點中沒設置好工程文件的的API代號,這我也不敢斷定,既然作者說了,那也寫出來,好給有問題的人一點提示。但自己做了一些測過,但大部分資料來自他的原文。
如果你在jni文件夾中執行(這個命令應該是顯示你編譯的平台):
XML/HTML代碼正常的話應該是出現你編譯的平台名字,如
XML/HTML代碼但Narek就出現如下的錯誤
XML/HTML代碼由於Vikas Patidar建議Narek用ndk-build DUMP_APP_ABI打印平台信息,從而查出NDK_MODULE_PATH沒有設定,所以V就成N的救星。
那麼NDK_MODULE_PATH是在哪裡?如果執行第三大步的第2小步命令,當命令執行不久,就可以看到NDK_MODULE_PATH的設置了
XML/HTML代碼如果屏幕滾得太快,可以用鍵盤的pause(break)鍵來暫停,Enter可以繼續。
這個變量可以以環境變量添加到編譯選項裡,也可以直接添加到jni的Android.mk文件中,Narek把加到mk文件樣板給貼出來了:
XML/HTML代碼當然這也僅供參考,具體還得看你自己的工程的NDK_MODULE_PATH是怎樣的。
3、開始GDB
只要出現(gdb)字樣,那麼接下去的事就是看你gdb基礎扎不扎實。
五、注意和提醒
1、在這裡提醒一下,Narek文中叫我們要注意兩個文件夾是否存在這些文件:
proj.android/libs/armeabi文件夾下:gdb.setup, gdbserver, libcocos2dcpp.so
proj.android/obj/local/armeabi(作者的路徑是proj.android/jni/obj/local/armeabi,我的是這個):app_process, gdb.setup, libc.so, linker
第一個文件夾下的文件是在第三點第2步自動生成的,只要用了debug模式。
第二個文件夾好像是執行了ndk-gdb.py後自動生成的。
反正我這邊這些文件都是自動生成的,但既然作者說了,大家也就檢查一下。
2、這個方法應該都可以使用到cocos2d-x3.x的版本。
下載和安裝Win7系統Android開發環境中講了怎樣在Win7系統中安裝An
初次接觸android studio大家可能總會拿它與eclipse做比較,有很多習慣與eclip
這是從Philippe Breault的系列文章《Android Studio Tips Of the Day》中提取出來的自認為精華的部分。 這
大部分編程人員進行程序代碼分析時往往喜歡從main函數入手,因為它是程序入口,