Lazy loaded image
🕚UE5.6 后 Shader 调试方法的变化
字数 305阅读时长 1 分钟
2025-8-23
2025-8-22
type
status
date
slug
summary
tags
category
icon
password
在 UE5.6 之前,我通常直接在我想要调试的 Shader 对应的 C++ 类里直接添加下面四个 Compiler Flags:
 
之后重新编译 Shaders 即可,最重要的是 CFLAG_GenerateSymbols,这一项,它会生成 Shader 符号并将其嵌入到 Shader 二进制里,这样 RenderDoc 或 PIX 之类的工具就能直接调试对应 Shader。
 
升级到 5.6 之后发现不能这么做,罪魁祸首是这笔提交 [D3D symbols improvements](https://github.com/EpicGames/UnrealEngine/commit/2b8334930fdb8b4db2ce75b4837504eb307fa737),简单来说就是 CFLAG_GenerateSymbols 生成的符号不会再内嵌到二进制内,从而导致 RenderDoc 和 PIX 无法直接识别符号,而需要手动加载。
 
解决方法是在 BaseEngine.ini 中修改 [ShaderCompiler] 一段,确保启用下面三个控制台变量:
 
前面的 ModifyCompilationEnvironment 里不再需要加 CFLAG_GenerateSymbols,只保留另外三个即可,重启编辑器并重新编译 Shaders,可以看到 Project/Saved/ShaderSymbols/PCD3D_SM6 路径下生成了 pdb 符号。
 
之后,我们需要在 RenderDoc 和 PIX 里面分别设置 Shader 符号搜索路径:
notion image
notion image
这样在抓帧之后就能成功调试了。
 
上一篇
利用 C++ Concepts 做编译期检查
下一篇
UE5 Android Vulkan 启用 Validation Layers

评论
Loading...