前段时间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. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  2. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  3. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  4. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  5. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  6. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  7. 23种设计模式--责任链模式-Chain of Responsibility Pattern

    一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...

  8. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  9. Expression Blend创建自定义按钮

    在 Expression Blend 中,我们可以在美工板上绘制形状.路径和控件,然后修改其外观和行为,从而直观地设计应用程序.Button按钮也是Expression Blend最常用的控件之一,在 ...

  10. 快递Api接口 & 微信公众号开发流程

    之前的文章,已经分析过快递Api接口可能被使用的需求及场景:今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景. 开发语言:Nodejs,其中用到了Neo4j图 ...