2012-06-21 23 views
7

No sé si muchos de ustedes probaron la nueva función excelente de Visual Studio 2012 para depurar aplicaciones basadas en Direct3D.Debugging Shaders en Visual Studio 2012, no puede encontrar los símbolos

éxito capturo un marco de mi aplicación, entonces yo quiero depurar la ejecución de un Vertex Shader: enter image description here

hago clic en el triángulo verde para depurar un vértice dado, pero tengo un "Ningún símbolo Encontrado "mensaje que me impide depurarlo.

¿Alguien sabe qué hacer para que Visual Studio encuentre los símbolos?

Gracias.

+0

¿Está depurando esto en la misma máquina que creó su aplicación? – reuben

Respuesta

3

De msdn:

No es posible depurar una aplicación y su código de sombreado al mismo tiempo. Sin embargo, puede alternar entre ellos

Es posible que esté depurando la aplicación y tratando de depurar el sombreador al mismo tiempo.

+0

Este es un problema diferente. Cuando está en el modo de diagnóstico de gráficos y utiliza las opciones de depuración en una captura de gráficos, por defecto ya está depurando los gráficos. El punto de viñeta de MSDN significa que no puede poner puntos de interrupción de la CPU al pasar por el código HLSL, y viceversa. – Camille

3

Al usar SlimDX puede pasar ShaderFlags al compilador de sombreado. Si pasa ShaderFlags.Debug, se incluirán los símbolos de depuración.

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

Esperemos que sea algo similar en Direct3D nativo.

+0

Algo similar es para SharpDX (Toolkit), por ejemplo, var compiledEffect = (nuevo EffectCompiler()). CompileFromFile (@ "Content \ MiniTri - Copy.fx", EffectCompilerFlags.Debug | EffectCompilerFlags.SkipOptimization); –

3

Necesita compilar sus sombreadores con información de depuración. Y para depurar de manera confiable, es probable que también desee deshabilitar las optimizaciones. Dependiendo de cómo se compila sus shaders, esta será una de dos maneras:

D3DCompile/D3DCompileFromFile: pasar los D3DCOMPILE_DEBUG banderas y D3DCOMPILE_SKIP_OPTIMIZATION a D3DCompile. Tenga en cuenta que, dependiendo de la versión D3D y de si está utilizando D3DX, estos indicadores pueden tener prefijos diferentes.

fxc.exe: Los indicadores de compilación tienen equivalentes de conmutación. Para D3DCOMPILE_DEBUG, pase /Zi a fxc. Para D3DCOMPILE_SKIP_OPTIMIZATION, pase /Od.

Visual Studio 2012 es bastante inteligente para encontrar el origen de los sombreadores en función de la información de depuración incorporada, pero si no lo hace, le pedirá que apunte al archivo correspondiente.

1

Pude depurar shaders en VS2012.

que utilizan esta línea de comandos:

fxc /TTargetProfile /EShaderMainFunctionName /Od /Zi /FdMyShader.pdb MyShaderFile 

En el código, he usado:

D3DX11CompileFromFile(filename, NULL, NULL, "ShaderMainFunctionName, "TargetProfile", D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, ...); 

TargetProfile es algo así como vs_5_0 o ps_5_0.

Estoy bastante seguro de que funcionaría con D3DCompile.

Cuando olvidé poner D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, e intenté cargar el archivo pdb manualmente, decía que los símbolos no coincidían.

Cuando lo hice bien, el Pixel Shader en la vista del historial de píxeles era un enlace azul. Cuando hice clic en él, cargó automáticamente el archivo correcto y pude comenzar a depurarlo.

No pude encontrar una relación codificada en/Fd que generó el archivo pdb, por lo que tuve que pasar por la línea de comandos.

Cuestiones relacionadas