Anpassa felsökningsutdata med ID3D10InfoQueue (Direct3D 10)

Informationskön hanteras av ett gränssnitt (se ID3D10InfoQueue Interface) som lagrar, hämtar och filtrerar felsökningsmeddelanden. Kön består av: en meddelandekö, en valfri lagringsfilterstack och en valfri hämtningsfilterstack. Lagringsfilterstacken kan användas för att filtrera de meddelanden som du vill lagra. hämtningsfilterstacken kan användas för att filtrera de meddelanden som du vill lagra. När du har filtrerat ett meddelande skrivs meddelandet ut till felsökningsfönstret och lagras i lämplig stack.

I regel:

Registerkontroller

Använd registernycklar för att justera filterinställningar, justera brytpunkter och för att stänga av felsökningsutdata. Felsökningsskiktet kontrollerar dessa sökvägar efter registernycklar. den första sökvägen som hittas används.

  1. HKCU\Software\Microsoft\Direct3D\<användardefinierad undernyckel>
  2. HKLM\Software\Microsoft\Direct3D\<användardefinierad undernyckel>
  3. HKCU\Software\Microsoft\Direct3D

Var:

  • HKCU står för HKEY_CURRENT_USER och HKLM står för HKEY_LOCAL_MACHINE.
  • <användardefinierad undernyckel> är ett godtyckligt namn för att lagra felsökningsinställningar för ett program

Filtrera felsökningsmeddelanden med hjälp av registernycklar

Om registret innehåller en InfoQueueStorageFilterOverride-nyckel (och är icke-noll) kan meddelanden (och felsökningsutdata) filtreras genom att lägga till följande registerkontroller.

  • DWORD Mute_CATEGORY_* – Debug-utdata om denna nyckel är icke-noll.
  • DWORD Mute_SEVERITY_* – Felsökningsutdata inaktiveras om den här nyckeln inte är noll.
  • DWORD Mute_ID_* – Meddelandenamn eller nummer kan användas för * (precis som för BreakOn_ID_* som beskrevs tidigare). Felsökningsutdata inaktiveras om detta nyckelvärde inte är noll.
  • DWORD Unmute_SEVERITY_INFO – Felsökningsutdata aktiveras om den här nyckeln inte är noll. Som standard, när InfoQueueStorageFilterOverride är aktiverad, inaktiveras felsökningsmeddelanden med allvarlighetsgrad INFORMATION. Vilket gör att INFO kan aktiveras igen för denna nyckel.

Dessa kontroller ändrar om ett meddelande registreras eller visas. de påverkar inte om ett API godkänns eller misslyckas.

Ange avbrottsvillkor med hjälp av registernycklar

Program kan tvingas att bryta ett meddelande med hjälp av följande registernycklar.

EnableBreakOnMessage – Den här nyckeln gör det möjligt att bryta på meddelanden (och gör att inställningarna i SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID() ignoreras). De faktiska meddelanden som ska brytas på definieras med hjälp av ett eller flera BreakOn_* värden som definieras nedan.

  • BreakOn_CATEGORY_* – Bryt alla meddelanden som skickas genom lagringsfiltren. * är ett av meddelandena i D3D10_MESSAGE_CATEGORY.
  • BreakOn_SEVERITY_* – Stoppa alla meddelanden som passerar genom lagringsfiltren. * är ett av de D3D10_MESSAGE_SEVERITY_ meddelandena.
  • BreakOn_ID_* – Bryt på alla meddelanden som passerar genom lagringsfiltren. * är ett av de D3D10_MESSAGE_ID_ meddelandena eller kan vara det numeriska värdet för feluppräkning. Anta till exempel att meddelandet med ID :t "D3D10_MESSAGE_ID_HYPOTHETICAL" hade värdet 123 i D3D10_MESSAGE_ID uppräkning. Om du i det här fallet skapar värdet BreakOn_ID_HYPOTHETICAL= 1 eller BreakOn_ID_123 = 1 skulle båda utföra samma sak - bryta när ett meddelande med ID D3D10_MESSAGE_ID_HYPOTHETICAL påträffas.

Stänga av felsökningsutdata med hjälp av registernycklar

Felsökningsutdata kan stängas av med hjälp av en MuteDebugOutput-nyckel. Förekomsten av det här värdet i registret tvingar en åsidosättning av InfoQueues ID3D10InfoQueue::SetMuteDebugOutput-metod. MuteDebugOutput hindrar meddelanden som passerar lagringsfiltret från att skickas till felsökningsutdata.

Inaktivera felsökningslagermeddelanden

Felsökningslagermeddelanden kan inaktiveras individuellt eller som en grupp vid körning genom att ange filter med hjälp av ID3D10InfoQueue::AddStorageFilterEntries. Argumentet pFilter till ID3D10InfoQueue::AddStorageFilterEntries tar en D3D10_INFO_QUEUE_FILTER struktur som innehåller en tillåtelselista och en förbudlista. Listan över tillåtna och nekanden beskrivs av D3D10_INFO_QUEUE_FILTER_DESC strukturer som gör att filtrering kan anges med hjälp av catergory, allvarlighetsgrad och individuellt meddelande-ID.

Följande kod är ett exempel på hur du konfigurerar ID3D10InfoQueue-gränssnittet för att neka D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL meddelandet.

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

API-funktioner (Direct3D 10)