Compartilhar via


Personalizar a saída de depuração com ID3D10InfoQueue (Direct3D 10)

A fila de informações é gerenciada por uma interface (consulte Interface ID3D10InfoQueue) que armazena, recupera e filtra mensagens de depuração. A fila consiste em: uma fila de mensagens, uma pilha de filtro de armazenamento opcional e uma pilha de filtro de recuperação opcional. A pilha de filtro de armazenamento pode ser usada para filtrar as mensagens que você deseja armazenar; a pilha de filtro de recuperação pode ser usada para filtrar as mensagens que você deseja armazenar. Depois de filtrar uma mensagem, a mensagem será impressa na janela de depuração e armazenada na pilha apropriada.

Em geral:

Controles do Registro

Use chaves do Registro para ajustar as configurações de filtro, ajustar os pontos de interrupção e ativar o mudo da saída de depuração. A camada de depuração marcar esses caminhos para chaves do Registro; o primeiro caminho encontrado será usado.

  1. HKCU\Software\Microsoft\Direct3D\<subchave definida pelo usuário>
  2. HKLM\Software\Microsoft\Direct3D\<subchave definida pelo usuário>
  3. HKCU\Software\Microsoft\Direct3D

Em que:

  • O HKCU é um suporte para HKEY_CURRENT_USER e HKLM para HKEY_LOCAL_MACHINE.
  • <subchave> definida pelo usuário é um nome arbitrário para armazenar configurações de depuração para um aplicativo

Filtrando mensagens de depuração usando chaves do Registro

Se o registro contiver uma chave InfoQueueStorageFilterOverride (e não for zero), as mensagens (e a saída de depuração) poderão ser filtradas adicionando os seguintes controles do Registro.

  • DWORD Mute_CATEGORY_* – Saída de depuração se essa chave não for zero.
  • DWORD Mute_SEVERITY_* – A saída de depuração será desabilitada se essa chave não for zero.
  • DWORD Mute_ID_* – o nome ou o número da mensagem pode ser usado para * (assim como para BreakOn_ID_* descrito anteriormente). A saída de depuração será desabilitada se essa chave não for zero.
  • DWORD Unmute_SEVERITY_INFO – A saída de depuração será HABILITADA se essa chave não for zero. Por padrão, quando InfoQueueStorageFilterOverride está habilitado, as mensagens de depuração com informações de severidade são silenciadas. Portanto, para essa chave, o INFO é ativado novamente.

Esses controles alteram se uma mensagem é gravada ou exibida; eles não afetam se uma API é aprovada ou falha.

Configurando condições de interrupção usando chaves do Registro

Os aplicativos podem ser forçados a interromper uma mensagem usando as seguintes chaves do Registro.

EnableBreakOnMessage – essa chave permite que a quebra de mensagens (e faça com que as configurações de SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID() sejam ignoradas). As mensagens reais a serem interrompidas são definidas usando um ou mais valores BreakOn_* definidos abaixo.

  • BreakOn_CATEGORY_* – interromper qualquer mensagem que passe pelos filtros de armazenamento. * é uma das mensagens D3D10_MESSAGE_CATEGORY.
  • BreakOn_SEVERITY_* – interromper qualquer mensagem que passe pelos filtros de armazenamento. * é uma das mensagens D3D10_MESSAGE_SEVERITY_.
  • BreakOn_ID_* – interromper qualquer mensagem que passe pelos filtros de armazenamento. * é uma das mensagens D3D10_MESSAGE_ID_ ou pode ser o valor numérico da enumeração de erro. Por exemplo, Suponha que a mensagem com a ID "D3D10_MESSAGE_ID_HYPOTHETICAL" tenha o valor 123 na enumeração D3D10_MESSAGE_ID. Nesse caso, a criação do valor BreakOn_ID_HYPOTHETICAL=1 ou BreakOn_ID_123=1 realizaria a mesma coisa – quebre quando uma mensagem com ID D3D10_MESSAGE_ID_HYPOTHETICAL for encontrada.

Ativando o mudo da saída de depuração usando chaves do Registro

A saída de depuração pode ser silenciada usando uma chave MuteDebugOutput. A presença desse valor no registro força a substituição do método ID3D10InfoQueue::SetMuteDebugOutput do InfoQueue. MuteDebugOutput impede que as mensagens que passam o filtro de armazenamento sejam enviadas para a saída de depuração.

Desabilitando mensagens de camada de depuração

As mensagens de camada de depuração podem ser desabilitadas individualmente ou como um grupo em runtime especificando filtros usando ID3D10InfoQueue::AddStorageFilterEntries. O argumento pFilter para ID3D10InfoQueue::AddStorageFilterEntries usa uma estrutura D3D10_INFO_QUEUE_FILTER que contém uma lista de permissões e uma lista de negação. As listas de permissões e negações são descritas por estruturas de D3D10_INFO_QUEUE_FILTER_DESC que permitem que a filtragem seja especificada por catergory, severidade e ID de mensagem individual.

O código a seguir é um exemplo de configuração da Interface ID3D10InfoQueue para negar a mensagem D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL.

  //retrieve the ID3D10InfoQueue from a Direct3D device created with the D3D10_CREATE_DEVICE_DEBUG flag
  ID3D10InfoQueue * pInfoQueue;
    g_pd3dDevice->QueryInterface( __uuidof(ID3D10InfoQueue),  (void **)&pInfoQueue );
    
  //set up the list of messages to filter
    D3D10_MESSAGE_ID messageIDs [] = { D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL };
    
  //set the DenyList to use the list of messages
    D3D10_INFO_QUEUE_FILTER filter = { 0 };
    filter.DenyList.NumIDs = 1;
    filter.DenyList.pIDList = messageIDs;
    
  //apply the filter to the info queue
    pInfoQueue->AddStorageFilterEntries( &filter );  

Camadas de API

Recursos de API (Direct3D 10)