我不知道你们中是否有很多人尝试过 Visual Studio 2012 新的出色功能来调试基于 Direct3D 的应用程序。
我成功捕获了我的应用程序的一帧,然后我想调试顶点着色器的执行:
我单击绿色三角形来调试给定的顶点,但我收到“未找到符号”消息,阻止我对其进行调试。
有人知道如何让 Visual Studio 找到符号吗?
谢谢。
我不知道你们中是否有很多人尝试过 Visual Studio 2012 新的出色功能来调试基于 Direct3D 的应用程序。
我成功捕获了我的应用程序的一帧,然后我想调试顶点着色器的执行:
我单击绿色三角形来调试给定的顶点,但我收到“未找到符号”消息,阻止我对其进行调试。
有人知道如何让 Visual Studio 找到符号吗?
谢谢。
您需要使用调试信息编译着色器。为了可靠地调试,您可能还希望禁用优化。根据您编译着色器的方式,这将是以下两种方式之一:
D3DCompile / D3DCompileFromFile:将D3DCOMPILE_DEBUG
和D3DCOMPILE_SKIP_OPTIMIZATION
标志传递给 D3DCompile。请注意,根据 D3D 版本以及您是否使用 D3DX,这些标志可能具有不同的前缀。
fxc.exe:编译标志具有开关等效项。对于D3DCOMPILE_DEBUG
,传递/Zi
给 fxc。为D3DCOMPILE_SKIP_OPTIMIZATION
,通过/Od
。
Visual Studio 2012 非常聪明地根据嵌入的调试信息查找着色器的源,但如果它无法做到这一点,它会提示您指向适当的文件。
使用 SlimDX 时,您可以传递ShaderFlags
给着色器编译器。传递ShaderFlags.Debug
会导致包含调试符号。
var bytecode = ShaderBytecode.CompileFromFile("shader.fx", "VShader", "vs_4_0", ShaderFlags.Debug, EffectFlags.None)
希望它在本机 Direct3D 中是类似的。
我能够在 VS2012 中调试着色器。
我使用了这个命令行:
fxc /TTargetProfile /EShaderMainFunctionName /Od /Zi /FdMyShader.pdb MyShaderFile
在代码中,我使用了:
D3DX11CompileFromFile(filename, NULL, NULL, "ShaderMainFunctionName, "TargetProfile", D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, ...);
TargetProfile 类似于vs_5_0
or ps_5_0
。
我很确定它可以与 D3DCompile 一起使用。
当我忘记放置D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION
时,我尝试手动加载 pdb 文件,它说符号不匹配。
当我做对时,Pixel History 视图中的 Pixel Shader 是一个蓝色链接。当我点击它时,它会自动加载正确的文件,我可以开始调试它。
我找不到生成 pdb 文件的 /Fd 的代码内等效项,这就是我必须通过命令行的原因。