2012-06-21 13 views
7

Non so se molti di voi hanno provato la nuova eccellente funzionalità di Visual Studio 2012 per eseguire il debug delle applicazioni basate su Direct3D.Debug degli shader su Visual Studio 2012, impossibile trovare i simboli

mi cattura con successo una cornice di mia app, allora voglio eseguire il debug l'esecuzione di un Vertex Shader: enter image description here

clicco sul triangolo verde per eseguire il debug un dato vertice, ma ho avuto un "Nessun simbolo Trovato "messaggio che mi impedisce di eseguire il debug.

Qualcuno sa cosa fare per Visual Studio per trovare i simboli?

Grazie.

+0

Stai eseguendo il debug sullo stesso computer che ha generato la tua app? – reuben

risposta

3

Da msdn:

Non è possibile eseguire il debug di un'applicazione e il relativo codice dello shader allo stesso tempo. Tuttavia, è possibile alternare tra loro

È possibile che si esegua il debug dell'applicazione e si provi a eseguire il debug di shader contemporaneamente.

+0

Questo è un altro problema. Quando si è in modalità Diagnostica grafica e si utilizzano le opzioni di debug in un'acquisizione grafica, per impostazione predefinita si sta già eseguendo il debug della grafica. Il punto elenco MSDN indica che non è possibile inserire i punti di interruzione della CPU mentre si passa attraverso il codice HLSL e viceversa. – Camille

3

Quando si utilizza SlimDX è possibile passare ShaderFlags al compilatore dello shader. Passando a ShaderFlags.Debug, è possibile includere i simboli di debug.

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

Si spera che sia qualcosa di simile in Direct3D nativo.

+0

Qualcosa di simile è per SharpDX (Toolkit), ad es. Var compiledEffect = (nuovo EffectCompiler()) .CompileFromFile (@ "Content \ MiniTri - Copy.fx", EffectCompilerFlags.Debug | EffectCompilerFlags.SkipOptimization); –

3

È necessario compilare gli shader con informazioni di debug. E per eseguire correttamente il debug, è probabile che tu voglia disabilitare anche le ottimizzazioni. A seconda di come si compila il tuo shader, questo sarà uno dei due modi:

D3DCompile/D3DCompileFromFile: Passare i D3DCOMPILE_DEBUG e D3DCOMPILE_SKIP_OPTIMIZATION bandiere a D3DCompile. Si noti che a seconda della versione di D3D e se si utilizza D3DX, questi flag potrebbero avere prefissi diversi.

fxc.exe: I flag di compilazione hanno equivalenti di commutazione. Per D3DCOMPILE_DEBUG, passare /Zi a fxc. Per D3DCOMPILE_SKIP_OPTIMIZATION, passare /Od.

Visual Studio 2012 è abbastanza intelligente nel trovare l'origine degli shader in base alle informazioni di debug incorporate, ma in caso contrario, verrà richiesto di puntare al file appropriato.

1

Sono stato in grado di eseguire il debug di shader in VS2012.

Ho usato questa riga di comando:

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

In codice, ho usato:

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

TargetProfile è qualcosa di simile vs_5_0 o ps_5_0.

Sono abbastanza sicuro che funzionerebbe con D3DCompile.

Quando ho dimenticato di inserire D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION e ho provato a caricare manualmente il file pdb, ha detto che i simboli non corrispondono.

Quando ho capito bene, Pixel Shader nella vista Cronologia pixel era un collegamento blu. Quando ho fatto clic, ha caricato automaticamente il file corretto e ho potuto iniziare il debugging.

Impossibile trovare un in-code equivalend per/Fd che ha generato il file pdb, motivo per cui ho dovuto passare attraverso la riga di comando.

Problemi correlati