簡體   English   中英

Visual Studio 圖形調試器引發讀取訪問沖突異常

[英]Visual Studio Graphics Debugger throws read access violation exception

我正在使用 Visual Studio 2019 中的 d3d11 庫編寫一個簡單的渲染器,它可以正常構建和運行。 但是,當我嘗試運行圖形調試器時,它會立即引發地址 0x0000000000000000 的讀取訪問沖突(這顯然是不正確的)。

從線上的DXCaptureReplay dll拋出異常

DeviceContext.PSSetShader(InShaderToBind.Shader.PS, NULL, 1);

其中 InShaderToBind.Shader.PS 是指向 ID3D11PixelShader 的指針

當我出於缺乏想法嘗試時,它變得最奇怪

int X = 0;
ID3D11ClassInstance* FakedClassInstance = reinterpret_cast<ID3D11ClassInstance*>(&X);

DeviceContext.PSSetShader(InShaderToBind.Shader.PS, &FakedClassInstance, 1);

因為這將使異常在我嘗試捕獲幀之前不會拋出(我想這是有道理的,因為該指針僅對 X 仍然有效的 scope 有效)

MSDN 文檔指出 NULL 應該是傳遞給 PSSetShader 的完全有效的參數(如此處所述: https://docs.microsoft.com/en-us/windows/win32/api/d3d11/11111d3dsetshader-id3 )

關於可能出現問題的任何想法?

(如果我注釋掉 PSSetShader,則不會引發異常,我可以進行捕獲)

如果啟用 Direct3D 調試設備,您將在調試 output window 中看到:

D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShader: Second parameter (ppClassInstances) corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #14: CORRUPTED_PARAMETER2]

當 NumClassInstances 為 0 時, NULL (或更好的nullptr )才適用於ppClassInstances 。嘗試:

DeviceContext.PSSetShader(InShaderToBind.Shader.PS, NULL, 0);

通常,在嘗試使用 PIX 或 VSGS 工具之前,您應該確保您的程序運行時不會從調試層發出 ERROR 或 CORRUPTION 消息。

請參閱Microsoft Docs此博客文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM