本地调试VS附加调试
踩坑1 预编译版本的UE5没有符号文件,无法调试源码
官方代码调试所需要的符号文件bdp需要下载导入。我安装的5.5.4是预编译版本,并非ue5源码。所以不含bdp文件。需要调试官方代码则需要通过EPIC中下载安装。右键UE版本,打开 选项。
到此,若你调试,可以看到官方代码能够调试成功,但是自己的代码附加调试还是无法命中断点。
纯蓝图转C++项目
在虚幻5中,首先创建项目有两种:纯蓝图 以及 C++项目。
通过工具新建c++类。可以先建个空白的。然后退出UE5,打开项目根目录,删除Binaries文件夹、Intermediate文件夹。右键Draft.uproject选择生成项目文件,接着打开Draft.sln解决方案。
打开项目后,解决方案里面有多个项目,只需要设置自己项目名称为启动项目,然后重新生成。
到此。蓝图项目变为了C++项目。编译成功后,通过EPIC可以打开。打开后UE界面右下角出现编译图标。
关闭实时编译防止报错。
本地调试(新创建一个UE界面)
此时,选择Development Editor 配置调试项目Draft,使用绿色本地调试按钮,则会重新创建一个UE5窗口,能够进入并命中断点。这种方式调试成功,但是每次需要重新打开UE编辑器,时间慢、卡顿。
因此需要使用附加程序调试。
踩坑2 附加程序调试
选择附加程序到Unreal engine.exe上调试。发现显示断点无法命中,不生效,打开UE5编辑器测试。确实如此。
检查自己的代码执行,确实输出了日志,表示执行了,但是没命中断点。
打开 调试-窗口-模块。发现只有名称Unreal Editor.exe模块。自己的项目名称为Draft没有加载进来。
查资料得知:
检查编译的配置,这里有四种模式,Debug Game、Debug GameEditor、Development、Development Editor。每种功能不一样。
测试检查发现,无论哪一种他们有一些能够在项目文件夹Draft\Binaries\Win64\中生成相关的pdb符号文件。但是这些dll或者exe都没有在附加程序调试的时候被加载到模块中。
到此,附加程序调试时候,编译没问题、程序执行有输出(只是不命中断点)、pdb符号文件生成成功的、死活就是加载不进去!!!!
直接本地调试一下就命中了,气人😡
断点失效原因:最后发现附加程序调试的时候,会加载整个UE编辑器的代码模块,因此数量庞大,而Visual Studio默认的调试模块最多500个,导致我自己写的代码生成的pdb文件没有加载进去。
解决办法:通过添加以下注册表项并重新启动 PC 来增加限制
打开注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
新建项:类型DWORD,10进制,名称DebuggerMaxModuleMsgs ,值 2048。重启电脑。
选择最长用的Development Editor,x64,Draft。启动EPIC的UE5项目,重新附加到Unreal Editor。
打开调试-窗口-模块。加载的模块大于500了,直接搜索Draft,发现有了。测试是否能调试:按照预期命中断点。并且不会再新打开UE5编辑器了。