Поделиться через


Обзор уровня отладки Direct2D

Уровень отладки Direct2D предоставляет сообщения об отладке во время разработки, чтобы свести к минимуму сбои приложения среды выполнения. В этом обзоре описываются основы уровня отладки Direct2D. Предполагается, что вы знакомы с созданием базовых приложений Direct2D.

Этот обзор содержит следующие разделы.

Что такое уровень отладки Direct2D

Уровень отладки Direct2D, реализованный отдельно от Direct2D в собственной библиотеке DLL с именем d2d1debug.dll, предоставляет сообщения отладки, позволяющие точно использовать функции Direct2D. Сообщения отладки часто возникают из-за нарушений контракта API, таких как недопустимые параметры (могут быть связаны с Direct3D), недопустимые ресурсы, нарушения потоков и проблемы с производительностью, такие как использование слоя, когда клипа было бы достаточно. Чтобы указать, какой объем информации отслеживается уровнем отладки, можно указать один из трех уровней отладки: сведения, предупреждение и ошибка; и сообщение об ошибке уровня активирует точку останова для отладки.

Установка уровня отладки Direct2D

Инструкции по установке отладочного уровня см. в разделе Установка уровня отладки Direct2D.

Включение отладочного слоя

Чтобы включить уровень отладки в приложении, укажите значение D2D1_DEBUG_LEVEL , отличное от D2D1_DEBUG_LEVEL_NONE при создании фабрики с помощью функции D2D1CreateFactory .

Примечание

Если отладочный уровень 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 не предоставляет выходные данные отладки.

Сообщения отладки