Udostępnij za pośrednictwem


Omówienie warstwy debugowania Direct2D

Warstwa debugowania Direct2D udostępnia komunikaty debugowania podczas projektowania, aby zminimalizować awarie aplikacji w czasie działania. W tym omówieniu opisano podstawy warstwy debugowania Direct2D. Przyjęto założenie, że znasz tworzenie podstawowych aplikacji Direct2D.

To omówienie zawiera następujące sekcje.

Co to jest warstwa debugowania Direct2D

Warstwa debugowania Direct2D zaimplementowana oddzielnie od direct2D we własnej biblioteki DLL o nazwie d2d1debug.dll, udostępnia komunikaty debugowania umożliwiające dokładne korzystanie z funkcji Direct2D. Komunikaty debug często wynikają z naruszeń kontraktu interfejsu API, takich jak nieprawidłowe parametry (może to być związane z Direct3D), nieprawidłowe zasoby, naruszenia wątków i problemy z wydajnością, takie jak używanie warstwy, kiedy klip byłby wystarczający. Aby określić, ile informacji jest śledzonych przez warstwę debugowania, można określić jeden z trzech poziomów debugowania: informacje, ostrzeżenie i błąd; i komunikat o błędzie na poziomie wyzwala punkt przerwania, aby ułatwić debugowanie.

Instalowanie warstwy debugowania Direct2D

Aby uzyskać instrukcje dotyczące instalowania warstwy debugowania, zobacz Instalowanie warstwy debugowania Direct2D.

Włączanie warstwy debugowania

Aby włączyć warstwę debugowania w aplikacji, określ wartość D2D1_DEBUG_LEVEL inną niż D2D1_DEBUG_LEVEL_NONE podczas tworzenia fabryki za pomocą funkcji D2D1CreateFactory.

Notatka

Jeśli warstwa debugowania Direct2D jest włączona, efekt zarządzania kolorami Direct2D (CLSID_D2D1ColorManagement) może spowodować naruszenie dostępu podczas ustawiania kontekstu koloru. Obejście polega na wyłączeniu warstwy debugowania podczas korzystania z efektu zarządzania kolorami

 

Włączenie warstwy debugowania dla fabryki umożliwia również debugowanie informacji o dowolnym obiekcie utworzonym przez tę fabrykę.

Poniższy przykład włącza warstwę debugującą dla fabryki, gdy aplikacja jest kompilowana z konfiguracją 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

Notatka

Jeśli nie określono żadnych opcji fabrycznych lub zostanie określony poziom debugowania "none", warstwa debugowania nie jest wywoływana. Warstwa debugowania nigdy nie powinna być aktywna w wersji wydania aplikacji.

 

W następnej sekcji opisano różne poziomy debugowania zdefiniowane przez wyliczenie D2D1_DEBUG_LEVEL.

Poziomy debugowania

Wyliczenie D2D1_DEBUG_LEVEL określa trzy poziomy debugowania: D2D1_DEBUG_LEVEL_ERROR (błąd), D2D1_DEBUG_LEVEL_WARNING (ostrzeżenie) i D2D1_DEBUG_LEVEL_INFORMATION (informacje). Te poziomy są interpretowane w następujący sposób:

  • Błąd: Direct2D wysyła do warstwy debugowania poważne komunikaty o błędach. Na przykład przerwanie ograniczenia wątkowości spowoduje wygenerowanie poważnego błędu.

  • Ostrzeżenie: Direct2D wysyła komunikaty o błędach i ostrzeżenia do warstwy debugowania, aby można było rozwiązać dowolny z tych komunikatów.

  • Informacje: Direct2D wysyła komunikaty o błędach, ostrzeżenia i dodatkowe informacje diagnostyczne do warstwy debugowania. Na przykład komunikaty o poprawie wydajności będą wysyłane na tym poziomie debugowania.

Wartość D2D1_DEBUG_LEVEL_NONE (brak) wskazuje, że funkcja Direct2D nie udostępnia żadnych danych wyjściowych debugowania.

Komunikaty debugowania