博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX11 调试Direct3D应用程序
阅读量:4087 次
发布时间:2019-05-25

本文共 1305 字,大约阅读时间需要 4 分钟。

调试Direct3D应用程序

1. 如何调试Direct3D应用程序?
我们实现了一个宏,用它来检查许多Direct3D函数返回的HRESULT值。这个宏定义在d3dUtil.h文件中:

#if defined(DEBUG) | defined(_DEBUG)    #ifndef HR    #define HR(x)                                              \    {                                                          \        HRESULT hr = (x);                                      \        if(FAILED(hr))                                         \        {                                                      \            DXTrace(__FILE__, (DWORD)__LINE__, hr, L#x, true); \        }                                                      \    }    #endif#else    #ifndef HR    #define HR(x) (x)    #endif#endif

当函数的返回值表明调用失败时,我们把返回值传递给DXTrace函数。请注意,当使用该函数时,我们必须在代码中添加包含语句“#include

HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine,    HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);

该函数可以弹出一个消息框,显示出现错误的文件、行号、有关错误的描述信息以及导致错误的函数名。图4.11是它的一个例子。注意,当DXTrace函数的最后一个参数设为false时,该函数不会显示消息框,而是把调试信息输出到Visual C++的输出窗口。当我们不使用调试模式时,HR宏不执行任何代码。另外,HR必须是一个宏而不能是一个函数;否则FILELINE将无法引用调用HR宏的函数所在的文件和行。

这里写图片描述

现在我们使用HR宏来包围返回HRESULT值的Direct3D函数,下面是一个例子:

HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice,    L"grass.dds", 0, 0, &mGrassTexRV, 0 ));

当我们调试演示程序时,这个宏可以很好地运作,但是对于一个实际的应用程序来说,我们应该使用更完善的错误处理机制。

注意:L#x将HR宏的参数转换成一个Unicode字符串。通过这一方式,我们可以把导致错误的函数调用语句输出到消息框上面。

你可能感兴趣的文章
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
Linux常用统计命令之wc
查看>>
fastcgi_param 详解
查看>>
搞定Java面试中的数据结构问题
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
Winform多线程
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
《PostgreSQL技术内幕:查询优化深度探索》养成记
查看>>
剑指_复杂链表的复制
查看>>
FTP 常见问题
查看>>
Python学习笔记之数据类型
查看>>
shell 快捷键
查看>>