Debugging 在Visual Studio 2012上调试着色器,can';我找不到符号

Debugging 在Visual Studio 2012上调试着色器,can';我找不到符号,debugging,direct3d,visual-studio-2012,sharpdx,Debugging,Direct3d,Visual Studio 2012,Sharpdx,我不知道你们中的许多人是否尝试过Visual Studio 2012的新的优秀功能来调试基于Direct3D的应用程序 我成功捕获了我的应用程序的一帧,然后我想调试顶点着色器的执行: 我点击绿色三角形调试一个给定的顶点,但是我得到了一条“找不到符号”的消息,这使我无法调试它 有人知道VisualStudio如何找到这些符号吗 谢谢。使用SlimDX时,您可以将ShaderFlags传递给着色器编译器。传递ShaderFlags.Debug会导致包含调试符号 var bytecode = Sha

我不知道你们中的许多人是否尝试过Visual Studio 2012的新的优秀功能来调试基于Direct3D的应用程序

我成功捕获了我的应用程序的一帧,然后我想调试顶点着色器的执行:

我点击绿色三角形调试一个给定的顶点,但是我得到了一条“找不到符号”的消息,这使我无法调试它

有人知道VisualStudio如何找到这些符号吗


谢谢。

使用SlimDX时,您可以将
ShaderFlags
传递给着色器编译器。传递
ShaderFlags.Debug
会导致包含调试符号

var bytecode = ShaderBytecode.CompileFromFile("shader.fx", "VShader", "vs_4_0", ShaderFlags.Debug, EffectFlags.None)
希望它与本机Direct3D中的内容类似。

来源:

不可能同时调试应用程序及其着色器代码。但是,您可以在它们之间交替使用


您可能正在调试应用程序,同时尝试调试着色器。

您需要使用调试信息编译着色器。为了可靠地进行调试,您可能还需要禁用优化。根据编译着色器的方式,这将是两种方法之一:

D3DCompile/D3DCompileFromFile:
D3DCompile\u DEBUG
D3DCompile\u SKIP\u优化
标志传递给D3DCompile。注意,根据D3D版本和是否使用D3DX,这些标志可能有不同的前缀

fxc.exe:编译标志具有开关等效项。对于
D3DCOMPILE\u DEBUG
,将
/Zi
传递给fxc。对于
D3DCOMPILE\u SKIP\u优化
,通过
/Od


Visual Studio 2012在根据嵌入的调试信息查找着色器的源代码方面相当聪明,但如果它无法做到这一点,它将提示您指向相应的文件。

我能够在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
ps_5_0

我很确定它会和D3DCompile一起工作

当我忘记放置
D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION
,并且我尝试手动加载pdb文件时,它说符号不匹配

当我做对了,像素历史视图中的像素着色器是一个蓝色链接。当我单击它时,它会自动加载正确的文件,我可以开始调试它


我找不到与生成pdb文件的/Fd等效的内部代码,这就是我必须通过命令行的原因。

您是否在生成应用程序的同一台计算机上调试此程序?这是另一个问题。当您处于图形诊断模式并在图形捕获中使用调试选项时,默认情况下,您已经在调试图形了。MSDN要点意味着您不能在单步执行HLSL代码时放置CPU断点,反之亦然。SharpDX(Toolkit)也有类似的情况,例如var compiledEffect=(new EffectCompiler()).CompileFromFile(@“Content\MiniTri-Copy.fx”,EffectCompilerFlags.Debug | EffectCompilerFlags.SkipOptimization);