前段時間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項目。