![](/img/trans.png)
[英]Why is the debugger throwing “read access violation. this was nullptr” exception?
[英]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.