使用“Cocos引擎”建立的cpp工程如何在VS中除錯Cocos2d-x原始碼
前段時間Cocos2d-x更新了一個Cocos引擎,這是一個集合原始碼,IDE,Studio這一家老小的整合包,我們可以使用這個Cocos引擎來建立我們的專案。
在Cocos2d-x被整合到Cocos引擎之前,我們可以不那麼方便地在我們建立的工程裡除錯Cocos2d-x的程式碼,當我們使用了整合後的Cocos引擎,除錯Cocos2d-x的程式碼就變得更加,非常不方便了!
使用Cocos2d-x建立的專案,在最先的版本必須是在Cocos2d-x引擎的目錄下,放到其他的位置需要進行各種麻煩的設定,諸如標頭檔案,庫檔案,dll等的路徑設定。而且所有的專案都擠在同一個解決方案下實在是過於臃腫。於是出現了建立一個單獨的解決方案這種做法,但這種做法與Cocos2d-x的原始碼分離了,不方便程式碼閱讀和除錯,程式崩潰時無法定位到Cocos2d-x的堆疊。
這時候要除錯到Cocos2d-x的原始碼,需要將你的專案新增到對應的Cocos2d-x解決方案下,這時候即可以切換原始碼,也可以除錯,只是一個簡單的新增專案操作,隨時可以移除,對自己的專案沒有影響。這種情況下大可在自己單獨的專案中進行編碼開發,到需要除錯Cocos2d-x的時候再回到Cocos2d-x解決方案下進行除錯。雖然不那麼方便,但也不算太麻煩。
使用Cocos引擎建立的專案,想要除錯Cocos2d-x原始碼,就呵呵了,首先並Cocos自身的Cocos2d-x原始碼沒有工程檔案,也沒有原始碼,有的只是一堆的標頭檔案以及編譯好的lib,dll。原始碼都沒有,你怎麼檢視呢?關鍵是也無法除錯到Cocos2d-x的原始碼,這點就非常不方便了。
折騰了一晚上,找到了比較簡單的方法,希望除錯Cocos引擎生成的程式碼,需要以下幾個步驟:
1.下載與Cocos引擎對應版本的Cocos2d-x原始碼
2.編譯生成下載完的Cocos2d-x原始碼
3.將使用Cocos引擎建立的專案新增到Cocos2d-x的解決方案下
4.為自己的專案新增依賴項,依賴libcocos2d專案
5.安心除錯
第四個步驟在之前Cocos2d-x版本中是不需要的,但在這裡如果不新增依賴,將無法載入libcocos2d的除錯資訊檔案,也就無法除錯了。另外必須先編譯生成Cocos2d-x原始碼,否則直接編譯自己工程可能會報錯。另外版本必須對應,如果不對應的話可能會報錯,有些函式不對應執行會直接崩潰。
新增依賴項有兩種方法,第一種是在專案的生成依賴項中進行設定:
選擇自己的專案,然後勾選希望除錯的原始碼工程
另外一個方法是在解決方案的屬性中設定
完成設定之後libcocos2d.pdb檔案載入成功,成功地在cocos2dx中斷下斷點。
PS.可能還有其他的方法可以來完成這樣一個需求,例如指定原始碼目錄之類的,但設定依賴項應該是最方便的了。
2015-2-4 重要補充:
Cocos引擎生成的Project想要除錯還需要以下步驟:
1.將Main.cpp中,連結cocos2dx.lib的程式碼刪除,這裡會強制連結到Cocos引擎生成的無除錯資訊的lib,我們要連結到的是帶除錯資訊的lib檔案。
1 #if _MSC_VER > 1700 2 #pragma comment(lib,"libcocos2d_2013.lib") 3 #pragma comment(lib,"libbox2d_2013.lib") 4 #pragma comment(lib,"libSpine_2013.lib") 5 #else 6 #pragma comment(lib,"libcocos2d_2012.lib") 7 #pragma comment(lib,"libbox2d_2012.lib") 8 #pragma comment(lib,"libSpine_2012.lib") 9 #endif
2.在附加依賴項中新增連結庫glew32.lib,因為libcocos2d_2013.lib將glew32.lib一起連結進來了,所以連結了libcocos2d_2013.lib就不需要再連結glew32.lib了,但原始的libcocos2d.lib並沒有連結它。
3.將專案屬性——C/C++——程式碼生成——執行庫,從多執行緒DLL(/MD)修改為多執行緒除錯DLL(MDD)。Cocos引擎生成的DEBUG專案實際上使用的是Release的設定。
4.刪除專案屬性中,生成事件——預連結生成事件,命令列中的內容,避免額外的麻煩。
5.最後別忘了引用Cocos2d-x專案。