前段时间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文件。

 #if _MSC_VER > 1700
#pragma comment(lib,"libcocos2d_2013.lib")
#pragma comment(lib,"libbox2d_2013.lib")
#pragma comment(lib,"libSpine_2013.lib")
#else
#pragma comment(lib,"libcocos2d_2012.lib")
#pragma comment(lib,"libbox2d_2012.lib")
#pragma comment(lib,"libSpine_2012.lib")
#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项目。

使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码的更多相关文章

  1. 轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)

    在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类:文本消息.二进制消息. 文本协议相对简单,通常使用一个特殊的标记符作为一个消息的结束. 二进制协议,通常是由消息头(Head ...

  2. thymeleaf模板引擎调用java类中的方法(附源码)

    前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...

  3. 9:关于Maven工程的文件标识(定义java文件源码,资源文件)

  4. Eclipse下建立geoserver源码工程

    摘要:本文详细阐述,如何基于geoserver源码构建eclipse工程文件,操作过程中除用到jdk.eclipse以外,还有git和maven,操作系统为windows8. 1安装Git 从(htt ...

  5. (转)把hadoop源码关联到eclipse工程

    把hadoop源码关联到eclipse工程     转:http://www.superwu.cn/2013/08/04/355 在eclipse中阅读源码非常方便,利于我们平时的学习,下面讲述如何把 ...

  6. 3D语音天气球(源码分享)——通过天气服务动态创建3D球

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  7. 3D语音天气球(源码分享)——创建可旋转的3D球

    开篇废话: 在9月份时参加了一个网站的比赛,比赛的题目是需要使用第三方平台提供的服务做出创意的作品. 于是我选择使用语音服务,天气服务,Unity3D,Android来制作一个3D语音天气预报,我给它 ...

  8. 将Spring源码转换为工程 + 导入Eclipse时缺失jar包

    将源码转换为工程: 比如查看Spring事务部分的源码. 打开cmd窗口,切换到Spring-tx文件夹下,执行命令 “gradle cleanidea eclipse” . 缺失jar包: 第一步: ...

  9. Spring源码分析之Bean的创建过程详解

    前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 本文内容: 在 ...

随机推荐

  1. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  2. 前端CSS预处理器Sass

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  3. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  4. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  5. 为你的Web程序加个启动画面

    .Net开发者一定熟悉下面这个画面: 这就是宇宙第一IDE Visual Studio的启动画面,学名叫Splash Screen(或者Splash Window).同样,Javar们一定对Eclip ...

  6. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  7. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  8. 如何将VCSA添加到微软域控环境,并且实现微软域账号登陆vCenter

    v:* { } o:* { } w:* { } .shape { } p.msonormal,li.msonormal,div.msonormal { margin: 0cm; margin-bott ...

  9. 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)

    很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...

  10. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...