Personnaliser la sortie de débogage avec ID3D10InfoQueue (Direct3D 10)

La file d’attente d’informations est gérée par une interface (voir ID3D10InfoQueue Interface) qui stocke, récupère et filtre les messages de débogage. La file d’attente se compose d’une file d’attente de messages, d’une pile de filtres de stockage facultative et d’une pile de filtres de récupération facultative. La pile storage-filter peut être utilisée pour filtrer les messages que vous souhaitez stocker ; la pile récupération-filtre peut être utilisée pour filtrer les messages que vous souhaitez stocker. Une fois que vous avez filtré un message, le message est imprimé dans la fenêtre de débogage et stocké dans la pile appropriée.

En général :

Contrôles du Registre

Utilisez des clés de Registre pour ajuster les paramètres de filtre, ajuster les points d’arrêt et désactiver la sortie de débogage. La couche de débogage case activée ces chemins d’accès pour les clés de Registre ; le premier chemin trouvé sera utilisé.

  1. HKCU\Software\Microsoft\Direct3D\<sous-clé définie par l’utilisateur>
  2. HKLM\Software\Microsoft\Direct3D\<sous-clé définie par l’utilisateur>
  3. HKCU\Software\Microsoft\Direct3D

Où :

  • HKCU pour HKEY_CURRENT_USER, et HKLM pour HKEY_LOCAL_MACHINE.
  • <la sous-clé> définie par l’utilisateur est un nom arbitraire permettant de stocker les paramètres de débogage d’une application

Filtrage des messages de débogage à l’aide de clés de Registre

Si le Registre contient une clé InfoQueueStorageFilterOverride (et est différent de zéro), les messages (et la sortie de débogage) peuvent être filtrés en ajoutant les contrôles de Registre suivants.

  • DWORD Mute_CATEGORY_* : déboguer la sortie si cette clé est différente de zéro.
  • DWORD Mute_SEVERITY_* : la sortie de débogage est désactivée si cette clé est différente de zéro.
  • DWORD Mute_ID_* : le nom ou le numéro du message peut être utilisé pour * (tout comme pour BreakOn_ID_* décrit précédemment). La sortie de débogage est désactivée si cette clé est différente de zéro.
  • DWORD Unmute_SEVERITY_INFO : la sortie de débogage est ACTIVÉE si cette clé est différente de zéro. Par défaut, lorsque InfoQueueStorageFilterOverride est activé, les messages de débogage avec des INFORMATIONS de gravité sont désactivés . Par conséquent, pour cette clé, info peut être réactivé.

Ces contrôles changent si un message est enregistré ou affiché ; elles n’affectent pas si une API réussit ou échoue.

Définition de conditions d’arrêt à l’aide de clés de Registre

Les applications peuvent être forcées de s’arrêter sur un message à l’aide des clés de Registre suivantes.

EnableBreakOnMessage : cette clé permet d’interrompre les messages (et d’ignorer les paramètres SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID(). Les messages réels à interrompre sont définis à l’aide d’une ou plusieurs valeurs BreakOn_* définies ci-dessous.

  • BreakOn_CATEGORY_* : arrêtez tout message passant par les filtres de stockage. * est l’un des messages D3D10_MESSAGE_CATEGORY.
  • BreakOn_SEVERITY_* : arrêtez tout message passant par les filtres de stockage. * est l’un des messages D3D10_MESSAGE_SEVERITY_.
  • BreakOn_ID_* : arrêtez tout message passant par les filtres de stockage. * est l’un des messages D3D10_MESSAGE_ID_ ou peut être la valeur numérique de l’énumération d’erreur. Par exemple, supposons que le message avec l’ID « D3D10_MESSAGE_ID_HYPOTHETICAL » ait la valeur 123 dans l’énumération D3D10_MESSAGE_ID. Dans ce cas, la création de la valeur BreakOn_ID_HYPOTHETICAL=1 ou BreakOn_ID_123=1 accomplirait la même chose : interrompre lorsqu’un message avec l’ID D3D10_MESSAGE_ID_HYPOTHETICAL est rencontré.

Désactiver la sortie de débogage à l’aide de clés de Registre

La sortie de débogage peut être désactivée à l’aide d’une clé MuteDebugOutput. La présence de cette valeur dans le Registre force le remplacement de la méthode ID3D10InfoQueue::SetMuteDebugOutput d’InfoQueue. MuteDebugOutput empêche les messages qui passent le filtre de stockage d’être envoyés à la sortie de débogage.

Désactivation des messages de couche de débogage

Les messages de couche de débogage peuvent être désactivés individuellement ou en tant que groupe au moment de l’exécution en spécifiant des filtres à l’aide de ID3D10InfoQueue::AddStorageFilterEntries. L’argument pFilterà ID3D10InfoQueue::AddStorageFilterEntries prend une structure D3D10_INFO_QUEUE_FILTER qui contient une liste verte et une liste de refus. Les listes d’autorisation et de refus sont décrites par D3D10_INFO_QUEUE_FILTER_DESC structures qui permettent de spécifier le filtrage par trait, gravité et ID de message individuel.

Le code suivant est un exemple de configuration de l’interface ID3D10InfoQueue pour refuser le message 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 );  

Couches d’API

Fonctionnalités de l’API (Direct3D 10)