Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A fila de informações é gerida por uma interface (consulte ID3D10InfoQueue Interface) que armazena, recupera e filtra mensagens de depuração. A fila consiste em: uma fila de mensagens, uma pilha de filtros de armazenamento opcional e uma pilha de filtros de recuperação opcionais. A pilha de filtros de armazenamento pode ser usada para filtrar as mensagens que você deseja armazenar; A pilha de filtros de recuperação pode ser usada para filtrar as mensagens que você deseja armazenar. Depois de filtrar uma mensagem, a mensagem será exibida na janela de depuração e armazenada na pilha apropriada.
Em geral:
- Chame ID3D10InfoQueue::AddApplicationMessage para gerar mensagens definidas pelo usuário
- A função ID3D10InfoQueue::GetMessage serve para obter mensagens (que passam por um filtro de recuperação opcional).
Controles de registro
Utilize as chaves do registo para ajustar as configurações do filtro, ajustar os pontos de interrupção e silenciar a saída de depuração. A camada de depuração verificará esses caminhos para chaves do Registro; O primeiro caminho encontrado será usado.
- HKCU\Software\Microsoft\Direct3D\<subchave definida pelo usuário>
- HKLM\Software\Microsoft\Direct3D\<subchave definida pelo usuário>
- HKCU\Software\Microsoft\Direct3D
Onde:
- HKCU significa HKEY_CURRENT_USER, e HKLM significa HKEY_LOCAL_MACHINE.
- A subchave <definida pelo usuário> é um nome arbitrário para armazenar configurações de depuração de uma aplicação.
Filtrando mensagens de depuração usando chaves do Registro
Se o registro contiver uma chave InfoQueueStorageFilterOverride (e for diferente de 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 esta chave for diferente de zero.
- DWORD Mute_SEVERITY_* - A saída de depuração será desativada se esta chave tiver um valor diferente de zero.
- DWORD Mute_ID_* - O nome ou número da mensagem pode ser usado para * (assim como para BreakOn_ID_* descrito anteriormente). A saída de depuração será desativada se esta chave for diferente de zero.
- DWORD Unmute_SEVERITY_INFO - A saída de depuração é ATIVADA se essa chave não for zero. Por padrão, quando InfoQueueStorageFilterOverride está habilitado, as mensagens de depuração com gravidade INFO são silenciadas - portanto, essa chave permite que INFO seja ativado novamente.
Esses controles mudam se uma mensagem é gravada ou exibida; eles não afetam se uma API passa ou falha.
Definindo condições de quebra usando chaves do Registro
As aplicações podem ser forçadas a interromper numa mensagem usando as seguintes chaves do registo.
EnableBreakOnMessage - Essa chave permite a quebra de mensagens (e faz com que as configurações SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID() do i sejam ignoradas). As mensagens reais a serem interrompidas são definidas usando um ou mais valores BreakOn_* definidos abaixo.
- BreakOn_CATEGORY_* - Interrompa qualquer mensagem que passe pelos filtros de armazenamento. * é uma das D3D10_MESSAGE_CATEGORY mensagens.
- BreakOn_SEVERITY_* - Interrompa qualquer mensagem que passe pelos filtros de armazenamento. * é uma das D3D10_MESSAGE_SEVERITY_ mensagens.
- BreakOn_ID_* - Interrompa qualquer mensagem que passe pelos filtros de armazenamento. * é uma das D3D10_MESSAGE_ID_ mensagens ou pode ser o valor numérico da enumeração de erro. Por exemplo, suponha que a mensagem com ID "D3D10_MESSAGE_ID_HYPOTHETICAL" tenha o valor 123 na enumeração D3D10_MESSAGE_ID. Nesse caso, criar o valor BreakOn_ID_HYPOTHETICAL=1 ou BreakOn_ID_123=1 teria o mesmo efeito - interromper quando uma mensagem com ID D3D10_MESSAGE_ID_HYPOTHETICAL for encontrada.
Silenciar Saída de Depuração usando chaves de registo
A saída de depuração pode ser silenciada usando uma chave MuteDebugOutput. A presença deste valor no registo obriga à substituição do método ID3D10InfoQueue::SetMuteDebugOutput do InfoQueue. MuteDebugOutput impede que mensagens que passam pelo filtro de armazenamento sejam enviadas para a saída de depuração.
Desativar mensagens da camada de depuração
As mensagens da camada de depuração podem ser desabilitadas individualmente ou como um grupo em tempo de execução, 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ções. As listas de permissão e negação são descritas por estruturas D3D10_INFO_QUEUE_FILTER_DESC que permitem que a filtragem seja especificada por catergoria, gravidade e ID de mensagem individual.
O código a seguir é um exemplo de configuração da ID3D10InfoQueue Interface para bloquear 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 );
Tópicos relacionados