2012-06-21 37 views
7

Tôi không biết liệu có nhiều bạn đã thử tính năng tuyệt vời mới của Visual Studio 2012 để gỡ lỗi các ứng dụng dựa trên Direct3D hay không.Gỡ lỗi Shaders trên Visual Studio 2012, không thể tìm thấy các Biểu tượng

tôi chụp thành công một khung ứng dụng của tôi, sau đó tôi muốn gỡ lỗi thực hiện một Vertex Shader: enter image description here

tôi bấm vào hình tam giác màu xanh lá cây để gỡ lỗi một đỉnh nào đó, nhưng tôi có một "Không Symbol Đã tìm thấy "thông báo ngăn tôi gỡ lỗi.

Ai đó biết phải làm gì để Visual Studio tìm thấy các biểu tượng?

Cảm ơn.

+0

Bạn có đang gỡ lỗi này trên cùng một máy đã tạo ứng dụng của mình không? – reuben

Trả lời

3

Từ msdn:

Nó không thể gỡ rối một ứng dụng và mã shader của nó cùng một lúc. Tuy nhiên, bạn có thể thay thế giữa chúng

Có thể bạn đang gỡ lỗi ứng dụng và cố gắng gỡ lỗi trình đổ bóng cùng một lúc.

+0

Đây là một vấn đề khác. Khi bạn đang ở chế độ Chẩn đoán đồ họa và sử dụng các tùy chọn gỡ lỗi trong chụp đồ họa, thì theo mặc định bạn đang gỡ lỗi đồ họa. Điểm bullet MSDN có nghĩa là bạn không thể đặt điểm ngắt CPU trong khi bước qua mã HLSL và ngược lại. – Camille

3

Khi sử dụng SlimDX, bạn có thể vượt qua ShaderFlags đến trình biên dịch đổ bóng. Việc chuyển ShaderFlags.Debug làm cho các biểu tượng gỡ lỗi được đưa vào.

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

Hy vọng nó tương tự như trong Direct3D gốc.

+0

Tương tự như đối với SharpDX (Bộ công cụ), ví dụ: var compiledEffect = (new EffectCompiler()). CompileFromFile (@ "Content \ MiniTri - Copy.fx", EffectCompilerFlags.Debug | EffectCompilerFlags.SkipOptimization); –

3

Bạn cần biên dịch trình đổ bóng của mình bằng thông tin gỡ lỗi. Và để gỡ lỗi đáng tin cậy, bạn có thể cũng muốn vô hiệu hóa tối ưu hóa. Tùy thuộc vào cách bạn biên dịch shaders của bạn, đây sẽ là một trong hai cách:

D3DCompile/D3DCompileFromFile: Vượt qua D3DCOMPILE_DEBUGD3DCOMPILE_SKIP_OPTIMIZATION cờ để D3DCompile. Lưu ý rằng tùy thuộc vào phiên bản D3D và cho dù bạn đang sử dụng D3DX, các cờ này có thể có các tiền tố khác nhau.

fxc.exe: Cờ biên dịch có chuyển đổi tương đương. Đối với D3DCOMPILE_DEBUG, vượt qua /Zi đến fxc. Đối với D3DCOMPILE_SKIP_OPTIMIZATION, vượt qua /Od. Visual Studio 2012 khá thông minh về việc tìm nguồn cho các trình đổ bóng của bạn dựa trên thông tin gỡ lỗi được nhúng, nhưng nếu nó không thực hiện được điều này, nó sẽ nhắc bạn trỏ đến tệp thích hợp.

1

Tôi đã có thể gỡ lỗi trình đổ bóng trong VS2012.

tôi sử dụng dòng này lệnh:

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

Trong mã, tôi đã sử dụng:

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

TargetProfile là một cái gì đó giống như vs_5_0 hoặc ps_5_0.

Tôi chắc chắn nó sẽ hoạt động với D3DCompile.

Khi tôi quên đặt D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION và tôi đã cố gắng tải tệp pdb theo cách thủ công, nó cho biết các ký hiệu không khớp.

Khi tôi nhận được đúng, Pixel Shader trong chế độ xem Lịch sử pixel là một liên kết màu xanh lam. Khi tôi nhấp vào nó, nó sẽ tự động tải các tập tin chính xác và tôi có thể bắt đầu gỡ lỗi nó.

Tôi không thể tìm thấy một mã tương đương với/Fd đã tạo tệp pdb, đó là lý do tại sao tôi phải đi qua dòng lệnh.