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

news2024/11/25 0:59:04

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 实现合并表头导出数据 - EasyExcel应用

文章目录 1. 构建实体类2. 导出3. 导入 EasyExcel是一款开源的Java处理Excel文件的工具库,它提供了简单易用的API,可以方便地读取、写入和操作Excel文件。下面是一些常见的EasyExcel应用场景: 读取Excel文件:使用EasyExcel可以轻…

阿里oss实现拖拽上传+二维码链接展示——技能提升

今天遇到一个需求,就是要实现拖拽上传文件,并调用渲染方法,将渲染后的链接通过二维码展示出来。 上一篇文章也是关于拖拽上传,但是接口是通过后端提供的上传方式来实现的,并非是直接调用阿里OSS来直接实现的。 1.拖拽…

月报总结|Moonbeam 6月份大事一览

本月,Moonbeam赢得第44轮Polkadot平行链插槽拍卖,在未来两年内都将保持活跃! 历时一个多月Moonbeam Bear Necessities Hackathon仍在如火如荼地进行着,从深入研究赛题的Workshop到解答疑惑的Office Hours,黑客松让BUI…

代码随想录算法训练营第七天 | 字符串基础系列1(反转字符串--反转字符串II--替换空格--反转字符串中的单词)

字符串基础系列1 344 反转字符串我的代码代码随想录的代码力扣的示例代码 541 反转字符串II我的代码代码随想录的代码力扣的示例代码 剑指offer-05 替换空格我的代码代码随想录的代码力扣的示例代码 151 反转字符串中的单词我的代码代码随想录的代码力扣的示例代码 一段用于复制…

电子时钟制作(瑞萨RA)(6)----配置RTC时钟及显示时间

概述 本文将详细讲解如何借助e2studio来对瑞萨微控制器进行实时时钟(RTC)的设置和配置,以便实现日历功能和一秒钟产生的中断,从而通过串口输出实时数据。 实时时钟(RTC)模块是一种时间管理外设&#xff0c…

部署深度学习APP的经历(docker,streamlit cloud,nuitka)

部署深度学习APP的经历 最近,接到一个部署深度学习APP的需求,这个APP使用torch、monai和pydicom等库构建了一个识别CT图像中皮下脂肪、内脏脂肪和骨骼肌,输入是CT图像,输出是识别的图像和相关数据。接手的时候,核心的算…

matlab将数据写入到excel中

第一种: 将数据转化为cell块,从A1单元格写起 % xlswrite(info_10*2.xls ,sheet1,B2:B4) clear; clc; a[1 2 3 4 5 6 ];%三组数据 b[11 22 33 44 55 66]; c[12 23 34 45 56 61]; data [a b c];%把数据保存到data中,其中a的表示转置 [m p]si…

PHP:提交表单之后出现本页面刷新的情况,导致路径参数消失

问题: 提交表单前 提交表单后 刷新之后,参数消失 解决办法 在提交表单的方法中写入代码携带参数的代码 样例: 实施 header(Location: table_detial.php?table_name.$table_name.);

Java Web JavaScript (2)23.7.2

5,BOM BOM:Browser Object Model 浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装为对象。 我们要操作浏览器的各个组成部分就可以通过操作 BOM 中的对象来实现。比如:我现在想将浏览器地址栏的地址改为 https://www.itheim…

m4a音频格式转换器:让音频轻松换装

大家有没有遇到这样的情况——你下载了一个很酷的音频文件,但是播放设备却说“不认识”这个格式?别担心!现在有个超级厉害的工具可以帮你解决这个问题,它就是m4a音频格式转换器!它能让你的音频文件变身,适应…

Java--基于Swing的登录界面

运行结果: 代码: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class ljt2 {public static void main(String[] args) {// 创建窗体JFrame frame new JFrame("学生信息管理系统");f…

数据处理及评分成果

文章目录 test.py界面展示 pf.pyfpga.py test.py import subprocess import os from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QWidget, QLabel import mysql.connector from PySide2.QtGui import QPixmap, QPalette, QColorconn …

spfa求负环

1.虫洞 Wormholes&#xff08;裸spfa判断负环问题&#xff09; 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid1507 #include<bits/stdc.h> using namespace std; const int N510,M5210; int d…

【花雕】全国青少年机器人技术一级考试试卷模拟题A组

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

kafka入门,高效读写数据,页缓存+零拷贝技术(十七)

高效读写数据 1)kafka本身是分布式集群&#xff0c;可以采用集群技术&#xff0c;并行度高 2&#xff09;读写数据采用稀疏索引&#xff0c;可以快熟定位要消费的数据 3&#xff09;顺序写磁盘 kafka的producer生产数据&#xff0c;要写入到log文件中&#xff0c;写的过程一直…

一个电脑小工具一键转化文件格式《File Converter》

介绍 File Converter是一种软件或在线服务&#xff0c;用于将一个文件格式转换为另一个文件格式。它可以帮助用户在不同的应用程序之间进行文件转换&#xff0c;以便更好地兼容和使用不同的文件类型。 File Converter可以转换各种类型的文件&#xff0c;包括文档、图像、音频…

前端食堂技术周刊第 89 期:ES 2023、MDN Playground、TS 5.2 Beta、逆向分析 GitHub Copilot

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;糯米糍荔枝 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看…

RIP实验

RIP实验 要求&#xff1a; 1、进行地址分配 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; 2、RIP配置&#xff0c;启动进程&#xff0c;选择版本&#xff0c;宣告网段 R1&#xff1a; R2&#xff1a; R3&…

kubernetes 节点维护 cordon, drain, uncordon

1.这三个命令是正式release的1.2新加入的命令&#xff0c;三个命令一起介绍&#xff0c;是因为三个命令配合使用可以实现节点的维护。在1.2之前&#xff0c;因为没有相应的命令支持&#xff0c;如果要维护一个节点&#xff0c;只能stop该节点上的kubelet将该节点退出集群&#…

“物联网IOT”技术在智能化数据中心低压配电系统中的运用

物联网、区块链、云计算、人工智能等新技术的发展让人们能够用新的方式更方便地获取和管理信息&#xff0c;已成为数字化转型的主要推动力。所谓物联网&#xff08;The Internet of Things&#xff0c;简称IOT&#xff09;&#xff0c;是互联网基础上的延伸和扩展的网络&#x…