【问题标题】:Debugging Shaders on Visual Studio 2012, can't find the Symbols在 Visual Studio 2012 上调试着色器,找不到符号
【发布时间】:2012-06-21 13:18:46
【问题描述】:

我不知道你们中是否有很多人尝试过 Visual Studio 2012 新的出色功能来调试基于 Direct3D 的应用程序。

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

我单击绿色三角形来调试给定的顶点,但我收到“未找到符号”消息,阻止我对其进行调试。

有人知道如何让 Visual Studio 找到符号吗?

谢谢。

【问题讨论】:

  • 您是否在构建您的应用程序的同一台机器上调试它?

标签: debugging direct3d visual-studio-2012 sharpdx


【解决方案1】:

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

D3DCompile / D3DCompileFromFile:D3DCOMPILE_DEBUGD3DCOMPILE_SKIP_OPTIMIZATION 标志传递给 D3DCompile。请注意,根据 D3D 版本以及您是否使用 D3DX,这些标志可能有不同的前缀。

fxc.exe:编译标志具有开关等效项。对于D3DCOMPILE_DEBUG,将/Zi 传递给fxc。对于D3DCOMPILE_SKIP_OPTIMIZATION,请传递/Od

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

【讨论】:

    【解决方案2】:

    来自msdn

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

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

    【讨论】:

    • 这是一个不同的问题。当您处于图形诊断模式并在图形捕获中使用调试选项时,默认情况下您已经在调试图形。 MSDN 要点意味着您不能在单步执行 HLSL 代码时放置 CPU 断点,反之亦然。
    【解决方案3】:

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

    var bytecode = ShaderBytecode.CompileFromFile("shader.fx", "VShader", "vs_4_0", ShaderFlags.Debug, EffectFlags.None)
    

    希望它在原生 Direct3D 中是类似的。

    【讨论】:

    • SharpDX (Toolkit) 有类似的东西,例如, var compiledEffect = (new EffectCompiler()).CompileFromFile(@"Content\MiniTri - Copy.fx", EffectCompilerFlags.Debug|EffectCompilerFlags.SkipOptimization) ;
    【解决方案4】:

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

    我很确定它可以与 D3DCompile 一起使用。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多