Direct2D 调试层概述

Direct2D 调试层提供设计时调试消息,以最大程度地减少运行时应用程序故障。 本概述介绍 Direct2D 调试层的基础知识。 它假定你熟悉如何创建基本的 Direct2D 应用程序。

本概述包含以下部分。

什么是 Direct2D 调试层

Direct2D 调试层在自己的名为 d2d1debug.dll 的 DLL 中独立于 Direct2D 实现,它提供调试消息,使你能够准确地使用 Direct2D 函数。 调试消息通常由 API 协定冲突导致,例如参数无效 (可能是与 Direct3D 相关的) 、无效资源、线程冲突以及性能问题(例如,在剪辑足够时使用层)。 若要指定调试层跟踪的信息量,可以指定三个调试级别之一:信息、警告和错误;和级别错误消息会触发断点以帮助调试。

安装 Direct2D 调试层

有关安装调试层的说明,请参阅 安装 Direct2D 调试层

启用调试层

若要在应用程序中启用调试层,请在使用 D2D1CreateFactory 函数创建工厂时指定除 D2D1_DEBUG_LEVEL_NONE 以外的D2D1_DEBUG_LEVEL值。

注意

如果启用了 Direct2D 调试层,则 Direct2D 颜色管理效果 (CLSID_D2D1ColorManagement) 可能会在设置颜色上下文时导致访问冲突。 解决方法是在使用颜色管理效果时禁用调试层

 

为工厂启用调试层还会启用该工厂创建的任何对象的调试信息。

以下示例在为 DEBUG 生成配置编译应用程序时为工厂启用调试层。

        // If you set the options.debugLevel to D2D1_DEBUG_LEVEL_NONE,
        // the debug layer is not enabled.
#if defined(DEBUG) || defined(_DEBUG)
        D2D1_FACTORY_OPTIONS options;
        options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;

        hr = D2D1CreateFactory(
            D2D1_FACTORY_TYPE_SINGLE_THREADED,
            options,
            &m_pD2DFactory
            );
#else
        hr = D2D1CreateFactory(
            D2D1_FACTORY_TYPE_SINGLE_THREADED,
            &m_pD2DFactory
            );
#endif

注意

如果未指定工厂选项或指定调试级别“none”,则不调用调试层。 调试层不应在应用程序的发布版本中处于活动状态。

 

下一部分介绍 由 D2D1_DEBUG_LEVEL 枚举定义的不同调试级别。

调试级别

D2D1_DEBUG_LEVEL枚举指定三个调试级别:D2D1_DEBUG_LEVEL_ERROR (错误) 、D2D1_DEBUG_LEVEL_WARNING (警告) 和D2D1_DEBUG_LEVEL_INFORMATION (信息) 。 这些级别的解释如下:

  • 错误: Direct2D 将严重错误消息发送到调试层。 例如,打破线程约束将生成严重错误。

  • 警告: Direct2D 将错误消息和警告发送到调试层,以便你可以处理其中的任何消息。

  • 信息: Direct2D 将错误消息、警告和其他诊断信息发送到调试层。 例如,性能改进消息将在此调试级别发送。

值D2D1_DEBUG_LEVEL_NONE (none) 指示 Direct2D 不提供任何调试输出。

调试消息