Visual Studio图形调试器详细使用教程(基于DirectX11) – X_Jun

Visual Studio图形调试器详细使用教程(基于DirectX11) – X_Jun

序祷

为DirectX顺序员,努力赶上运用视觉 Studio Graphics Debugger(图形调试器)可以帮忙你片面知情追求某人干线用管绑定资源和运转情状,找出成绩地方。如今我将用我在图形调试侧面的亲身参与来描绘它。。

以下快速地流动由于visua Studio 2017 社区。

同时,我提议你知情我的DirectX 11门快速地流动,描绘办法脱直线 SDK及Effects11,运用hlsl编纂者/d3d编纂者和窗口 功绩DirectX的SDK 11适合:

DirectX11 With Windows sdk完整的物质

迎将食物混合配料QQ群 727623616 朕可以一同议论dx11,很大程度上的成绩都可以在在这一点上告发。。

非直接性生产任务

率先决定其正中鹄的哪每一安定了DirectX图形调试器,必要视觉效应 Studio 安定顺序决定此使排出其正中鹄的哪每一已被反省。

安定并进入使排出,调试前必要在调试制作创造者中配备使排出

于是检查现货的波湾阴谋选择权,以防运用了HLSL编纂者,关怀其正中鹄的哪每一对debug mod正中鹄的懂得明暗面器禁用优选法,并启用调试书信。

率先,右键单击内幕的每一明暗面器-属性

于是在调试配备下,选择hlsl compiler-all选择权,禁用优选法并启用调试书信

以防运用了d3d编纂者,在加密水平面波湾阴谋上色器(运转时,你必要在调试制作创造者中赠送它D3DComplieFromFile有或起作用高处D3DCOMPILE_DEBUGD3DCOMPILE_SKIP_OPTIMIZATION用于打自由主义者暗面器调试和停下优选法的斑点:

HRESULT CreateShaderFromFile(const WCHAR * csoFileNameInOut, const WCHAR * hlslFileName,
    LPCSTR entryPoint, LPCSTR shaderModel, ID3DBlob ** ppBlobOut)
{
    HRESULT hr = S_OK;

    // 找出其正中鹄的哪每一在已波湾阴谋的顶提示暗面器
    if (csoFileNameInOut && filesystem::exists(csoFileNameInOut))
    {
        return D3DReadFileToBlob(csoFileNameInOut, ppBlobOut);
    }
    else
    {
        DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#ifdef _DEBUG
        // 设置 D3DCOMPILE_DEBUG 获取明暗面器调试书信的标识。此斑点能力更强的了调试体会,
        // 合法的依然容许上色顺序以最适宜的办法运转
        dwShaderFlags |= D3DCOMPILE_DEBUG;

        // 在调试事实中禁用优选法以避开很大程度上的矛盾的投资
        dwShaderFlags |= D3DCOMPILE_SKIP_OPTIMIZATION;
#endif
        ID3DBlob* errorBlob = nullptr;
        hr = D3DCompileFromFile(hlslFileName, nullptr, D3D_COMPILE_STANDARD_FILE_INCLUDE, entryPoint, shaderModel,
            dwShaderFlags, 0, ppBlobOut, &errorBlob);
        if (使失望(hr)
        {
            if (errorBlob != nullptr)
            {
                OutputDebugStringA(reinterpret_cast(errorBlob->GetBufferPointer()));
            }
            SAFE_RELEASE(errorBlob);
            return hr;
        }

        // 以防特别的阐明了出口决定,于是出口明暗面器二元系书信
        if (csoFileNameInOut)
        {
            return D3DWriteBlobToFile(*ppBlobOut, csoFileNameInOut, 过失)
        }
    }

    return hr;
}

截获一帧

图形调试器的调试通常是对准这样的事物帧的使适合停止的。完全的是你这么说的嘛!配备后,第一步朕必要翻开图形调试器去截取一帧以为有成绩的使适合来停止调试。

确保先于缺席裂开断点非常的成绩,以防有的话请先以后普通的调试器处置成绩。究竟图形调试器是要处置图形显示非常,普通调试无法找到的成绩,GPU必要调试。更,您还必要停止画阶段先于的懂得断点。

有两种办法翻开图形调试器,第每一是快捷办法alt f5处置,以防缺席回应,您可以用次货种办法启动和告知已收到快捷办法。

二是VS交相间的选择调试图形启动图形调试。

进入顺序后,用包裹 屏风(prtsc)键截获一帧有成绩的pictur,于是就可以笔记苍白方框区域执意你刚截下的一帧使适合

现实建造的是每一图形日记文档(。图像记载,朕必要以后他调试图形。。

您可以在每一调试中截获多个帧,但大抵眼前朕只必要截获一帧就可以抛弃顺序了。停下顺序后,朕可以点击蓝色部门的单词:设计XXXX 或许双点取屏风翻开visua 画室图形辨析仪。

图形调试器预演

下面是图形调试器的主相间的

事变列表

事变列表显示对DirectX一些交相间的类客体的要紧理由。现在时的看是GPU任务,可以遵守到D3D知识放向绘制和内幕绑定的GPU履历修复的懂得运转。以防更反倒工夫线,您可以笔记使关心d3d知识contex的更特别的的理由运转。,您可以笔记在每个阶段绑定了孰资源,孰情状被更改,理由画。

用画笔理由表现这是画适应,您可以单击它来遵守画情状,直到办法被理由。

检查传入缓冲液履历

朕可以在图形调试器检查顶峰缓冲液,引用缓冲液和常数缓冲液。

在下面的事变列表中,朕可以笔记很多蓝色脚本。客体:XX,懂得这些都可以以后单击。在这一点上朕以绘制事变绑定的顶峰缓冲液为例

朕可以遵守缓冲液正中鹄的音节数、运用投资、绑定紧跟、CPU增长力量等。。遵守到的履历松劲朕设置的体式。。

图形调试器供养遵守的使生根典型列举如下:

有记分音节典型 音节(sbyte) 2byte 4byte 8byte
无记分音节典型 ubyte u2byte u4byte u8byte
妖法音节典型 xbyte x2byte x4byte x8byte
有记分概数 short int int64(long)
无记分概数 ushort uint uint64(ulong)
妖法概数 xshort xint xint64(xlong)
半紧密浮点法型 half half2 half3 half4
单准确的浮点法型 float float2 float3 float4
双准确的浮点法型 double

更,体式栏容许朕输出以供养使生根的。拿 … 来说,如今坐落于的顶峰容纳投资、法带菌者和台词使调和,于是朕可以输出体式栏float3 float3 float2将输出履历重行解说为输出顶峰书信:

异样,为引用缓冲液,朕可以输出体式栏short short shortint int int遵守三个引用结成基元的引用阻碍:

为常数缓冲液,明暗面器阶段可以绑定多个常数缓冲液,输出的履历松劲您所适应的物质。ID3D11DeviceContext::*SSetConstantBuffers用于办法绑定和最不可能性的每一工夫戳的常数缓冲液ID3D11DeviceContext::UpdateSubresource办法修复履历,运用的缓冲液松劲您在现货中使安定的加密。拿 … 来说,有以下常数缓冲液块:

// 尸体分界线让吃饱
struct Material
{
    float4 Ambient;
    float4 Diffuse;
    float4 Specular; // w = SpecPower
    float4 Reflect;
};

cbuffer CBChangesEveryDrawing : register(b0)
{
    row_major matrix gWorld;
    row_major matrix gWorldInvTranspose;
    row_major matrix gTexTransform;
    Material gMaterial;
}

朕运用float4体式容许您检查书信。每个矩阵容纳四行,Material四条线路也被占用了:

在上色资源VIE中检查台词资源

由于台词可以绑定在上色资源VIE中,还可以绑定台词阻碍。在这一点上以另每一顺序的图形调试为例,演示办法检查绑定到浮现管道的台词资源。

单击ps shader资源的蓝色部门,可以检查明暗面器资源的情状

如今让朕看一下shader资源绑定,点击资源对应的蓝字(DDSTextureLoader)就可以检查绑定的台词资源。

在这一点上朕可以遵守培养台词体式。。在以后DDSTextureLoaderWICTextureLoader培养的台词自动行为建造mipmap链,如今培养512×512台词,它有10顶点资源。,选择mip部门以检查剩余额子资源的台词。跟随MIP部门梯度的高处,宽度和高级的逐渐为前一级的1/2

在隔墙建立组织图上,默许遵守的是台词RGB隔墙色的结成,可以开除选中以停下频道的色,或修正小心研究以选择colo的视力的小心研究。以防选择alpha隔墙,可是独自遵守隔墙的色。。下面是原始围栏框的alpha隔墙(苍白是alpha值1, 黑色是字母0):

接下来是遵守台词队列,现实上,这和先前的手术很外表,但间或朕可能性在先于的极度的课程中未发现台词。,朕可以从以下客体表中找到它。客体表曾经容纳了由d3使成为的主体资源或客体。

虽然光看客体名看不出什么,朕依然可以以后搜索差不多找到它。。下面是每一公报板的先例,拿 … 来说,我如今在寻觅台词资源,在搜索栏中输出Texture按典型搜索:

台词阻碍培养四个一组之物台词,它的音节大小人也应该是较大的,双点取以检查树的台词:

朕以后变换阻碍部门来遵守支持物树的台词。:

检查资源历史记载

小心看,你会找到有些资源有工夫特征,点击检查资源的历史偏离,孰办法更改了此资源?。

装出我点击了它。PS明暗面器资源右手的工夫特征,您可以笔记右舷的资源的读写:

于是单击以检查当初资源的特别的书信。。

随球追求某人Pipelin的每个阶段的情状

选择画事变,于是在下面的情状栏中,可以笔记与前每一d的比拟。,孰阶段产生了偏离?。更改将以苍白排出显示。在此情状下,您可以检查现在时的绑定到DRA的懂得资源、上色和情状,向上看比向上看客体表更清澈的。

管道阶段

异样是要先选择画事变,于是选择成为以下情状的管道阶段ba,您可以笔记现在时的ru的区分上色阶段,和其正中鹄的哪每一在缺席输出/出口或缺席从CER抬出去的成绩。

为三维创造者,点击输出汇编顺序进入预演网格相间的。至若制作创造者的运转,朕暂时的不谈了。必要处置事件,不可避免的选择内幕的每一上流器才干在现场运转。运转客体,不可避免的选择左栏正中鹄的每一器才干对其停止运转。

为可编程序性顶峰上色阶段,朕可以笔记地形。输出/出口栏有 输出/出口的每个顶峰的值和对应的语义成分。内幕的SV_POSITION(x, y, z, w)在处置到(x/w, y/w, z/w, 1)检查它其正中鹄的哪每一在NDC使调和系中(齐次剪裁使调和,要不然,顶峰将不能的传送到下每一阶段。。每个顶峰都可以以后上色孤独调试。

将看:输出/出口切换成绑定资源,您还可以笔记在明暗面器阶段绑定孰资源以供运用。。

切换到像素明暗面器可能性看不到很大程度上的输出或出口,但可以用可供选择的事物办法,以后特别的阐明。朕不要在在这一点上谈下面所说的事。

最不可能性的,出口结成,切换到绑定资源,您可以笔记吃水/模板缓冲液和备份文件缓冲液绑定d的情状。。

检查吃水缓冲液资源

接下来执意我刚至于的。,单击LEF上的吃水/模板缓冲液,朕可以笔记苍白的放。,黑色表现吃水值的台词。黑色越深,吃水值i越小。

由于此图正中鹄的模板值缺席更改,我再选择一张带有模板和吃水值的出口来演示。

它就在在这一点上。,容纳模板值的区域得gree,但当与深缓冲液的苍白混合时,它会落下黄色。,朕可以停下吃水部门以检查仅容纳气温的绿色部门。。

可供选择的事物办法是变换你对待它的办法。如DXGI_FORMAT_D24_UNORM_S8_UINT包含模板和吃水值,那DXGI_FORMAT_R24_UNORM_X8_TYPELESS仅包含吃水值,DXGI_FORMAT_X24_TYPELESS_G8_UINT仅包含模板值。

检查帧图像中像素的追求某人历史记载

点击培养的告发,于是选择要遵守的像素。,您可以笔记像素从开端到完毕的绘制进展。,在画事变中,还可以检查它属于顶峰的使生根体,和像素上色、有出口兼有的亲身参与。

明暗面器调试

如今朕至于到主音。,运用图形调试器的玉蜀黍发育不良的穗意愿坚决的不然要遵守上色器运转的时辰碰见了孰成绩。间或,自然,甚至有些投资下会成穹状材质球,而n,这时辰就先要去后面电台、电视节目该绑定资源、情状、上色器、输出其正中鹄的哪每一整齐的?,于是调试最不可能性的每一任务的上色器。。

回到管道阶段或绘制像素历史,特别的阐明明暗面器阶段,选择每一元素,点击每一相像的人电台、电视节目的装有钮扣就可以开端进入明暗面器调试。

于是它在现实抬出去的上色加密的第社交聚会停滞。可以设置断点,也可以逐渐调试,在vs debuggin中像先前类似于调试。此刻,您率先必要关怀将在、输出值其正中鹄的哪每一整齐的?,以防常数缓冲液正中鹄的值整个为0或随机,解说常数缓冲液不克不及修复。以防常数缓冲液的值从C 侧传送到在这一点上,,您还必要检查常数bu的包装其正中鹄的哪每一有成绩。

HLSL包装合格的,你可以在在这一点上笔记:
对HLSL恒缓冲包装合格的的深刻担心

以防有位置变量未运用的阐明,有可能性在下面所说的事调试器实在使生根不能的用到下面所说的事值,或许遗忘将常数缓冲液绑定到上色阶段。

呈现位置变量。小心研究内的阐明,可能性是变量还没有口供或分派,必要持续抬出去到SE。

分色器向······猛扑

总而言之,朕首要不见上色器的决心。,相反,它偶然地了很大程度上的附加书信,下面所说的事明暗面器有什么用常数缓冲液和解体输出/出口署名办法,打包常数缓冲液中每个元素的音节偏移量。

右键单击明暗面器加密,选择 奔赴拆卸,您可以笔记向······猛扑阐明,于是完全往上滚,滚到启程看一眼下面说的是什么:

总结

调试技艺必要常常运用才干纯熟把握,与普通调试比拟,图形调试将非常复杂。在功绩初始阶段,资源经管轻易呈现成绩。,因而用铰链连接是在画前告知已收到。,绑定到浮现管道的杂多的资源其正中鹄的哪每一为norma,于是对该上色器加密停止调试。到这地步,非直接性生产任务正中鹄的过失通常占,而上色器加密启蒙的过失可能性合法的占较小的一部门。当追求某人管道的资源绑定经管体系逐渐仔细考虑过的时,图形调试的主音将逐渐转变到上色加密调试中。。间或候图形调试器处置没完没了的成绩,还必要小心遵守普通调试下的出口窗口其正中鹄的哪每一有追求某人干线用管绘制事变抬出去时出口的报错书信。

自然,常很大程度上非常的功用缺席被抬出去,或许它还归咎于每一普通的列表。有兴趣的讲师可以检查微软的法定的国文文档知情一下:

Visual Studio 图形诊断结论概述

下面所说的事视频博客未来会变换。,由于随后的人身攻击的努力赶上将致使新的调试盘问和ch。

DirectX11 With Windows sdk完整的物质

迎将食物混合配料QQ群 727623616 朕可以一同议论dx11,很大程度上的成绩都可以在在这一点上告发。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Message *
Name*
Email *