前段时间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项目。