You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动Visual Studio图形诊断时触发Access Violation异常求助

针对DirectX 11项目VS图形诊断触发D3D12Core.dll访问违例的排查方案

1. 强制图形诊断使用D3D11捕获路径

VS图形诊断的MONZA引擎在双GPU环境下可能默认走D3D12捕获逻辑,即使项目基于D3D11开发。可手动指定捕获模式:

  • 右键项目 → 属性 → 调试 → 图形诊断,找到“捕获目标”选项,强制设置为Direct3D 11而非自动检测;
  • 若属性中无此选项,可在调试启动前,点击VS工具栏的“图形诊断”下拉菜单,选择“启动图形诊断(仅限Direct3D 11)”。

2. 重置图形诊断缓存与修复MONZA组件

MONZA异常是触发后续D3D12访问违例的根源,可通过以下步骤重置:

  • 关闭VS,删除目录%LOCALAPPDATA%\Microsoft\VisualStudio\17.0_<你的VS实例ID>\GraphicsDiagnostics下的所有缓存文件;
  • 打开VS安装程序,选择“修改”,先移除“图形诊断工具”组件,重启后重新添加该组件,确保组件文件完整。

3. 手动指定调试时使用的GPU

双GPU环境下,VS调试可能未正确识别默认GPU,需在代码中强制绑定NVIDIA适配器:

#include <dxgi.h>
#pragma comment(lib, "dxgi.lib")

// 初始化D3D设备前手动选择NVIDIA GPU
IDXGIFactory1* pFactory = nullptr;
HRESULT hr = CreateDXGIFactory1(IID_PPV_ARGS(&pFactory));
if (SUCCEEDED(hr))
{
    IDXGIAdapter* pAdapter = nullptr;
    for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
    {
        DXGI_ADAPTER_DESC adapterDesc;
        pAdapter->GetDesc(&adapterDesc);
        // 匹配NVIDIA显卡
        if (wcsstr(adapterDesc.Description, L"NVIDIA") != nullptr)
        {
            break;
        }
        pAdapter->Release();
        pAdapter = nullptr;
    }

    // 使用选中的适配器创建D3D11设备
    ID3D11Device* pDevice = nullptr;
    ID3D11DeviceContext* pContext = nullptr;
    hr = D3D11CreateDevice(pAdapter, D3D_DRIVER_TYPE_UNKNOWN, nullptr,
        D3D11_CREATE_DEVICE_DEBUG, nullptr, 0, D3D11_SDK_VERSION,
        &pDevice, nullptr, &pContext);

    if (pAdapter) pAdapter->Release();
    pFactory->Release();
}

4. 升级Visual Studio版本

VS 2022 17.6.5存在图形诊断与双GPU环境兼容的已知问题,建议升级至17.10及以上版本,或回退到17.5版本测试,新版本修复了多个MONZA引擎和D3D组件交互的bug。

内容的提问来源于stack exchange,提问作者IT Tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:58:11