Freigeben über


Anpassen der Debugausgabe mit ID3D10InfoQueue (Direct3D 10)

Die Informationswarteschlange wird von einer Schnittstelle verwaltet (siehe ID3D10InfoQueue-Schnittstelle), die Debugnachrichten speichert, abruft und filtert. Die Warteschlange besteht aus: einer Nachrichtenwarteschlange, einem optionalen Speicherfilterstapel und einem optionalen Abruffilterstapel. Der Speicherfilterstapel kann verwendet werden, um die Nachrichten zu filtern, die gespeichert werden sollen. Der Stapel des Abruffilters kann verwendet werden, um die nachrichten zu filtern, die gespeichert werden sollen. Nachdem Sie eine Nachricht gefiltert haben, wird die Nachricht im Debugfenster ausgedruckt und im entsprechenden Stapel gespeichert.

Im Allgemeinen:

Registrierungssteuerelemente

Verwenden Sie Registrierungsschlüssel, um Filtereinstellungen anzupassen, Breakpoints anzupassen und die Debugausgabe stumm zu schalten. Die Debugebene überprüft diese Pfade auf Registrierungsschlüssel. der erste gefundene Pfad wird verwendet.

  1. HKCU\Software\Microsoft\Direct3D\<Benutzerdefinierter Unterschlüssel>
  2. HKLM\Software\Microsoft\Direct3D\<Benutzerdefinierter Unterschlüssel>
  3. HKCU\Software\Microsoft\Direct3D

Hierbei gilt:

  • HKCU steht für HKEY_CURRENT_USER und HKLM steht für HKEY_LOCAL_MACHINE.
  • <Benutzerdefinierter Unterschlüssel> ist ein beliebiger Name zum Speichern von Debugeinstellungen für eine Anwendung

Filtern von Debugnachrichten mithilfe von Registrierungsschlüsseln

Wenn die Registrierung einen InfoQueueStorageFilterOverride-Schlüssel enthält (und ungleich Null ist), können Nachrichten (und Debugausgabe) gefiltert werden, indem die folgenden Registrierungssteuerelemente hinzugefügt werden.

  • DWORD Mute_CATEGORY_* – Debugausgabe, wenn dieser Schlüssel ungleich 0 ist.
  • DWORD Mute_SEVERITY_* – Die Debugausgabe ist deaktiviert, wenn dieser Schlüssel ungleich 0 ist.
  • DWORD Mute_ID_* – Nachrichtenname oder -nummer kann für * verwendet werden (genau wie für BreakOn_ID_* beschrieben). Die Debugausgabe ist deaktiviert, wenn dieser Schlüssel ungleich Null ist.
  • DWORD Unmute_SEVERITY_INFO: Die Debugausgabe ist AKTIVIERT, wenn dieser Schlüssel ungleich 0 ist. Wenn InfoQueueStorageFilterOverride aktiviert ist, werden Debugnachrichten mit dem Schweregrad INFO standardmäßig stummgeschaltet. Daher kann INFO für diesen Schlüssel wieder aktiviert werden.

Diese Steuerelemente ändern, ob eine Nachricht aufgezeichnet oder angezeigt wird. Sie wirken sich nicht darauf aus, ob eine API erfolgreich ist oder fehlschlägt.

Festlegen von Unterbrechungsbedingungen mithilfe von Registrierungsschlüsseln

Anwendungen können gezwungen werden, eine Nachricht mit den folgenden Registrierungsschlüsseln zu unterbrechen.

EnableBreakOnMessage : Dieser Schlüssel ermöglicht das Unterbrechen von Nachrichten (und bewirkt, dass die Einstellungen setBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID() ignoriert werden). Die tatsächlich zu unterbrechenden Nachrichten werden mithilfe eines oder mehrerer BreakOn_*-Werte definiert, die unten definiert sind.

  • BreakOn_CATEGORY_* – Unterbrechen Sie alle Nachrichten, die durch die Speicherfilter gesendet werden. * ist eine der D3D10_MESSAGE_CATEGORY Nachrichten.
  • BreakOn_SEVERITY_* : Unterbrechen Sie alle Nachrichten, die die Speicherfilter durchlaufen. * ist eine der D3D10_MESSAGE_SEVERITY_ Nachrichten.
  • BreakOn_ID_* – Unterbrechen Sie alle Nachrichten, die die Speicherfilter durchlaufen. * ist eine der D3D10_MESSAGE_ID_ Nachrichten oder kann der numerische Wert der Fehleraufzählung sein. Angenommen, die Nachricht mit der ID "D3D10_MESSAGE_ID_HYPOTHETICAL" weist den Wert 123 in der D3D10_MESSAGE_ID-Enumeration auf. In diesem Fall würde das Erstellen des Werts BreakOn_ID_HYPOTHETICAL=1 oder BreakOn_ID_123=1 dasselbe erreichen: Unterbrechung, wenn eine Nachricht mit der ID D3D10_MESSAGE_ID_HYPOTHETICAL gefunden wird.

Stummschalten der Debugausgabe mithilfe von Registrierungsschlüsseln

Die Debugausgabe kann mithilfe eines MuteDebugOutput-Schlüssels stummgeschaltet werden. Das Vorhandensein dieses Werts in der Registrierung erzwingt die Überschreibung der ID3D10InfoQueue::SetMuteDebugOutput-Methode von InfoQueue. MuteDebugOutput verhindert, dass Nachrichten, die den Speicherfilter übergeben, an die Debugausgabe gesendet werden.

Deaktivieren von Meldungen auf Debugebene

Nachrichten auf Debugebene können einzeln oder als Gruppe zur Laufzeit deaktiviert werden, indem Filter mithilfe von ID3D10InfoQueue::AddStorageFilterEntries angegeben werden. Das pFilter-Argument für ID3D10InfoQueue::AddStorageFilterEntries verwendet eine D3D10_INFO_QUEUE_FILTER-Struktur , die eine Zulassungsliste und eine Ablehnungsliste enthält. Die Zulassungs- und Ablehnungslisten werden durch D3D10_INFO_QUEUE_FILTER_DESC Strukturen beschrieben, die es ermöglichen, die Filterung nach Catergorie, Schweregrad und einzelner Nachrichten-ID anzugeben.

Der folgende Code ist ein Beispiel für das Einrichten der ID3D10InfoQueue-Schnittstelle , um die D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL Nachricht zu verweigern.

  //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 );  

API-Ebenen

API-Features (Direct3D 10)