Cocos Creator:原生引擎内存泄漏检测系统

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

原生引擎内存泄漏检测系统

原生引擎使用 C++ 语言开发,为了方便游戏和引擎开发者快速查找内存泄漏,Creator 从 v3.4 开始提供了 内存泄漏检测系统

相对其他内存泄漏查找工具,Cocos Creator 内置的内存泄漏检测工具有以下优点:

  • 跨平台:支持 Windows/Android/Mac/iOS 平台。
  • 易用性:无需下载额外的工具以及进行复杂的配置。支持输出内存泄漏处的堆栈信息,方便快速定位泄漏。
  • 一致性:各平台的使用流程几乎一致,都是从原生平台对应的 IDE 中启动游戏 -> 运行一段时间 -> 关闭游戏 -> 查看 IDE 输出日志。
  • 实时性:查找泄露过程中的游戏帧率虽有下降,但仍然保持实时运行帧率。
  • 精确性:理论上零漏报,零误报。

使用步骤

内存泄漏检测系统默认是关闭的。若要开启,需要将引擎目录下 engine/native/cocos/base/Config.h 文件中宏 USE_MEMORY_LEAK_DETECTOR 的值修改为 1

 #ifndef USE_MEMORY_LEAK_DETECTOR
     #define USE_MEMORY_LEAK_DETECTOR 1
 #endif

由于实现机制的不同,Android 平台上需要额外执行以下步骤:

在项目目录的 native/engine/android/CMakeLists.txt 文件中添加一行代码 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finstrument-functions"),如下所示:

 set(CC_PROJ_SOURCES)
 set(CC_COMMON_SOURCES)
 set(CC_ALL_SOURCES)

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finstrument-functions")

从原生平台对应的 IDE(如 Visual Studio、Android Studio、Xcode)启动游戏,运行一段时间后关闭游戏,若存在内存泄漏,则此时会在 IDE 的输出窗口中输出内存泄漏的详细信息。

Windows 平台

visual studio

若项目构建编译的是 Release 版本,如果需要更友好的堆栈信息,可在 Visual Studio 中右键点击左侧的可执行项目,选择 属性,打开项目属性页,进行如下设置:

  • 链接器 -> 调试 -> 生成调试信息:生成调试信息(/DEBUG)
  • C/C++ -> 优化 -> 优化:已禁用(/Od)
  • C/C++ -> 优化 -> 内联函数扩展:已禁用(/Ob0)

Android 平台

android studio

Mac/iOS 平台

xcode

根据原生平台 IDE 输出的信息修复泄漏,如此反复,直到没有泄漏为止。

3D建模学习工作室 翻译整理,转载请注明出处

上一篇:Cocos Creator:CMake 使用简介 (mvrlink.com)

下一篇:Cocos Creator:原生场景剔除 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号