次の方法で共有


Direct2D デバッグ レイヤーの概要

Direct2D デバッグ レイヤーには、ランタイム アプリケーションのエラーを最小限に抑えるためのデザイン時デバッグ メッセージが用意されています。 この概要では、Direct2D デバッグ レイヤーの基本について説明します。 基本的な Direct2D アプリケーションの作成に精通していることを前提としています。

この概要には、次のセクションが含まれています。

Direct2D デバッグ レイヤーとは

direct2D デバッグ レイヤーは、d2d1debug.dllという名前の独自の DLL で Direct2D とは別に実装され、Direct2D 関数を正確に使用できるようにするためのデバッグ メッセージを提供します。 デバッグ メッセージは、多くの場合、無効なパラメーター (Direct3D 関連の可能性があります)、無効なリソース、スレッド違反、クリップで十分な場合にレイヤーを使用するなどのパフォーマンスの問題などの API コントラクト違反によって発生します。 デバッグ レイヤーによってトレースされる情報の量を指定するには、3 つのデバッグ レベル (情報、警告、エラー) のいずれかを指定します。レベル エラーのメッセージによってブレークポイントがトリガーされ、デバッグに役立ちます。

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 (情報) の 3 つのデバッグ レベルを指定します。 これらのレベルは次のように解釈されます。

  • エラー: Direct2D は重大なエラー メッセージをデバッグ レイヤーに送信します。 たとえば、スレッド制約を解除すると重大なエラーが発生します。

  • 警告: Direct2D は、エラー メッセージと警告をデバッグ 層に送信して、これらのメッセージのいずれかに対処できるようにします。

  • 情報: Direct2D は、エラー メッセージ、警告、および追加の診断情報をデバッグ 層に送信します。 たとえば、パフォーマンス向上メッセージは、このデバッグ レベルで送信されます。

D2D1_DEBUG_LEVEL_NONE値 (なし) は、Direct2D がデバッグ出力を提供しないことを示します。

デバッグ メッセージ