type
status
date
slug
summary
tags
category
icon
password
<ins/>
5.6 前 Shader 调试方法
在 UE5.6 之前,我通常直接在我想要调试的 Shader 对应的 C++ 类里直接添加下面四个 Compiler Flags:
之后重新编译 Shaders 即可,最重要的是 CFLAG_GenerateSymbols,这一项,它会生成 Shader 符号并将其嵌入到 Shader 二进制里,这样 RenderDoc 或 PIX 之类的工具就能直接调试对应 Shader。
5.6 后 Shader 调试方法
升级到 5.6 之后发现不能这么做,罪魁祸首是这笔提交 D3D Symbols Improvements,简单来说就是 CFLAG_GenerateSymbols 生成的符号不会再内嵌到二进制内,从而导致 RenderDoc 和 PIX 无法直接识别符号,而需要手动加载。
解决方法是在 BaseEngine.ini 中修改 [ShaderCompiler] 一段,确保启用下面三个控制台变量:
前面的 ModifyCompilationEnvironment 里不再需要加 CFLAG_GenerateSymbols,只保留另外三个即可,重启编辑器并重新编译 Shaders,可以看到 Project/Saved/ShaderSymbols/PCD3D_SM6 路径下生成了 pdb 符号。
之后,我们需要在 RenderDoc 和 PIX 里面分别设置 Shader 符号搜索路径:


这样在抓帧之后就能成功调试了。
5.6 后单个 Shader 调试方法
前面说的方法是对所有 Shader 都生成 pdb,这样会大幅减缓打开 RenderDoc 或 PIX 的时间,我们可以对上面的方法稍微做下修改,只生成我们需要调试的 Shader 的 pdb,首先在 BaseEngine.ini 中进行修改,只打开一项:
然后找到我们需要调试的 Shader 对应的 cpp 代码中的 ModifyCompilationEnvironment() 函数,在其中添加:
这样就只会生成对应 Shader 的 pdb,路径跟前面一样,我们把 RenderDoc 和 PIX 的 pdb 搜索路径设置正确即可调试。
- 作者:Kindem
- 链接:https://www.flyandnotdown.com/post/2578fb78-2f78-8059-9454-f82cc4bf6e7d
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。








