Visual Studio 2012の新しい優れた機能を試して、Direct3Dベースのアプリをデバッグした方が多いかどうかはわかりません。
アプリのフレームを正常にキャプチャした後、VertexShaderの実行をデバッグしたいと思います。
緑の三角形をクリックして特定の頂点をデバッグしましたが、「シンボルが見つかりません」というメッセージが表示され、デバッグできません。
Visual Studioがシンボルを見つけるために何をすべきか知っている人はいますか?
ありがとう。
Visual Studio 2012の新しい優れた機能を試して、Direct3Dベースのアプリをデバッグした方が多いかどうかはわかりません。
アプリのフレームを正常にキャプチャした後、VertexShaderの実行をデバッグしたいと思います。
緑の三角形をクリックして特定の頂点をデバッグしましたが、「シンボルが見つかりません」というメッセージが表示され、デバッグできません。
Visual Studioがシンボルを見つけるために何をすべきか知っている人はいますか?
ありがとう。
デバッグ情報を使用してシェーダーをコンパイルする必要があります。また、確実にデバッグするために、最適化も無効にすることをお勧めします。シェーダーのコンパイル方法に応じて、これは次の2つの方法のいずれかになります。
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で似たようなものです。
msdnから:
アプリとそのシェーダーコードを同時にデバッグすることはできません。ただし、それらを交互に使用することはできます
アプリケーションのデバッグと同時にシェーダーのデバッグを試みている可能性があります。
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に相当するコード内が見つかりませんでした。そのため、コマンドラインを使用する必要がありました。