Delen via


Uitvoer van foutopsporing aanpassen met ID3D10InfoQueue (Direct3D 10)

De informatiewachtrij wordt beheerd door een interface (zie ID3D10InfoQueue Interface) waarin foutopsporingsberichten worden opgeslagen, opgehaald en gefilterd. De wachtrij bestaat uit: een berichtenwachtrij, een optionele opslagfilterstack en een optionele ophaalfilterstack. De opslagfilterstack kan worden gebruikt om de berichten te filteren die u wilt opslaan; de stack voor ophalen en filteren kan worden gebruikt om de berichten te filteren die u wilt opslaan. Nadat u een bericht hebt gefilterd, wordt het bericht afgedrukt naar het foutopsporingsvenster en opgeslagen in de juiste stack.

In het algemeen:

Registerinstellingen

Gebruik registersleutels om filterinstellingen aan te passen, onderbrekingspunten aan te passen en de uitvoer van foutopsporing te dempen. De foutopsporingslaag controleert deze paden op registersleutels; het eerste gevonden pad wordt gebruikt.

  1. HKCU\Software\Microsoft\Direct3D\<door de gebruiker gedefinieerde subsleutel>
  2. HKLM\Software\Microsoft\Direct3D\<door de gebruiker gedefinieerde subsleutel>
  3. HKCU\Software\Microsoft\Direct3D

Waar:

  • HKCU staat voor HKEY_CURRENT_USER en HKLM staat voor HKEY_LOCAL_MACHINE.
  • <door de gebruiker gedefinieerde subsleutel> is een willekeurige naam voor het opslaan van foutopsporingsinstellingen voor een toepassing

Foutopsporingsberichten filteren met registersleutels

Als het register een InfoQueueStorageFilterOverride-sleutel bevat (en niet nul is), kunnen berichten (en uitvoer voor foutopsporing) worden gefilterd door de volgende registerbesturingselementen toe te voegen.

  • DWORD Mute_CATEGORY_* - Foutopsporingsuitvoer als deze sleutel niet nul is.
  • DWORD Mute_SEVERITY_* - Uitvoer voor foutopsporing is uitgeschakeld als deze sleutel niet nul is.
  • DWORD Mute_ID_* - Een berichtnaam of nummer kan worden gebruikt voor *, net als voor BreakOn_ID_*, zoals eerder beschreven. Foutopsporingsuitvoer is uitgeschakeld als deze sleutel niet nul is.
  • DWORD-Unmute_SEVERITY_INFO: uitvoer voor foutopsporing is INGESCHAKELD als deze sleutel niet nul is. Wanneer InfoQueueStorageFilterOverride is ingeschakeld, worden foutopsporingsberichten met de INFO-severity bij de standaardinstelling gedempt. Met deze sleutel kan INFO daarom weer worden ingeschakeld.

Deze bedieningen wijzigen of een bericht wordt opgenomen of getoond; ze hebben geen invloed op het al dan niet slagen van een API.

Onderbrekingsvoorwaarden instellen met registersleutels

Toepassingen kunnen worden gedwongen om een bericht te verbreken met behulp van de volgende registersleutels.

EnableBreakOnMessage - : Met deze sleutel kunnen berichten worden onderbroken, en daardoor worden de instellingen voor SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID() genegeerd. De werkelijke berichten die moeten worden onderbroken, worden gedefinieerd met behulp van een of meer BreakOn_* waarden die hieronder zijn gedefinieerd.

  • BreakOn_CATEGORY_*- Onderbreek bij elk bericht dat door de opslagfilters doorloopt. * is een van de D3D10_MESSAGE_CATEGORY berichten.
  • BreakOn_SEVERITY_* - Onderbreek bij elk bericht dat door de opslagfilters gaat. * is een van de D3D10_MESSAGE_SEVERITY_ meldingen.
  • BreakOn_ID_* - Onderbreek elk bericht dat door de opslagfilters gaat. * is een van de D3D10_MESSAGE_ID_ berichten of kan de numerieke waarde van de opsomming van de fout zijn. Stel dat het bericht met id 'D3D10_MESSAGE_ID_HYPOTHETICAL' de waarde 123 in de opsomming D3D10_MESSAGE_ID had. In dit geval zou het maken van de waarde BreakOn_ID_HYPOTHETICAL=1 of BreakOn_ID_123=1 beide hetzelfde bereiken: onderbreking wanneer een bericht met id D3D10_MESSAGE_ID_HYPOTHETICAL wordt aangetroffen.

Foutopsporingsuitvoer dempen met behulp van registersleutels

Uitvoer van foutopsporing kan worden gedempt met behulp van een MuteDebugOutput-sleutel. De aanwezigheid van deze waarde in het register forceert een overschrijving van de ID3D10InfoQueue::SetMuteDebugOutput-methode. MuteDebugOutput zorgt ervoor dat berichten die via het opslagfilter gaan, niet naar de debug-uitvoer worden gestuurd.

Foutopsporingslaagberichten uitschakelen

Foutopsporingslaagberichten kunnen afzonderlijk of als een groep tijdens runtime worden uitgeschakeld door filters op te geven met behulp van ID3D10InfoQueue::AddStorageFilterEntries. Het argument pFilter voor ID3D10InfoQueue::AddStorageFilterEntries gebruikt een D3D10_INFO_QUEUE_FILTER structuur die een acceptatielijst en een lijst weigeren bevat. De toestaan- en weigerenlijsten worden beschreven door D3D10_INFO_QUEUE_FILTER_DESC structuren waarmee filteren kan worden opgegeven door categorie, ernst en afzonderlijke bericht-ID.

De volgende code is een voorbeeld van het instellen van de ID3D10InfoQueue Interface om het D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL bericht te weigeren.

  //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-lagen

API functies (Direct3D 10)