Partilhar via


Visão geral da camada de depuração do Direct2D

A camada de depuração do Direct2D fornece mensagens de depuração durante a fase de concepção para minimizar as falhas da aplicação em tempo de execução. Esta visão geral descreve os conceitos básicos da camada de depuração Direct2D. Ele pressupõe que você esteja familiarizado com a criação de aplicativos Direct2D básicos.

Esta visão geral contém as seguintes seções.

O que é a camada de depuração do Direct2D

A camada de depuração do Direct2D, implementada separadamente do Direct2D em sua própria DLL chamada d2d1debug.dll, fornece mensagens de depuração para permitir que você use com precisão as funções do Direct2D. As mensagens de depuração geralmente resultam de violações de contrato de API, como parâmetros inválidos (podem estar relacionados ao Direct3D), recursos inválidos, violações de threading e problemas de desempenho, como o uso de uma camada quando um clipe seria suficiente. Para especificar quanta informação é rastreada pela camada de depuração, você pode especificar um dos três níveis de depuração: informação, aviso e erro; e uma mensagem de erro de nível aciona o ponto de interrupção para ajudá-lo a depurar.

Instalando a camada de depuração do Direct2D

Para obter instruções sobre como instalar a camada de depuração, consulte Instalando a camada de depuração Direct2D.

Ativando a camada de depuração

Para habilitar a camada de depuração no teu aplicativo, especifica um valor de D2D1_DEBUG_LEVEL diferente de D2D1_DEBUG_LEVEL_NONE quando criares uma fábrica com a funçãoD2D1CreateFactory.

Observação

Se a camada de depuração do Direct2D estiver habilitada, o efeito de gerenciamento de cores do Direct2D (CLSID_D2D1ColorManagement) poderá causar uma violação de acesso ao definir um contexto de cores. A solução alternativa é desativar a camada de depuração ao usar o efeito de gerenciamento de cores

 

Habilitar a camada de depuração para uma fábrica também permite a depuração de informações para qualquer objeto criado por essa fábrica.

O exemplo a seguir habilita a camada de depuração para uma fábrica quando o aplicativo é compilado para a configuração de compilação 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

Observação

Se nenhuma opção de fábrica for especificada ou um nível de depuração de "nenhum" for especificado, a camada de depuração não será invocada. A camada de depuração nunca deve estar ativa na versão de lançamento de um aplicativo.

 

A próxima seção descreve os diferentes níveis de depuração definidos pela enumeração D2D1_DEBUG_LEVEL.

Níveis de depuração

A enumeração D2D1_DEBUG_LEVEL especifica três níveis de depuração: D2D1_DEBUG_LEVEL_ERROR (erro), D2D1_DEBUG_LEVEL_WARNING (aviso) e D2D1_DEBUG_LEVEL_INFORMATION (informações). Estes níveis são interpretados da seguinte forma:

  • Erro: Direct2D envia mensagens de erro críticas para a camada de depuração. Por exemplo, quebrar uma restrição de threading gerará um erro grave.

  • Aviso: Direct2D envia mensagens de erro e avisos para a camada de depuração para que você possa endereçar qualquer uma dessas mensagens.

  • Informação: O Direct2D envia mensagens de erro, avisos e informações adicionais de diagnóstico para a camada de depuração. Por exemplo, mensagens de melhoria de desempenho serão enviadas nesse nível de depuração.

O valor D2D1_DEBUG_LEVEL_NONE (none) indica que o Direct2D não fornece nenhuma saída de depuração.

Depurar mensagens