Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kolejka informacji jest zarządzana przez interfejs (zobacz ID3D10InfoQueue Interface), który przechowuje, pobiera i filtruje komunikaty debugowania. Kolejka składa się z: kolejki komunikatów, opcjonalnych stosów filtrów magazynowania i opcjonalnych stosów filtrów pobierania. Stos filtrów magazynowania może służyć do filtrowania komunikatów, które mają być przechowywane; stos filtrów pobierania może służyć do filtrowania komunikatów, które mają być pobierane. Po przefiltrowanym komunikacie komunikat zostanie wyświetlony w oknie debugowania i zapisany w odpowiednim stosie.
Ogólnie rzecz biorąc:
- Wywołaj ID3D10InfoQueue::AddApplicationMessage w celu wygenerowania komunikatów zdefiniowanych przez użytkownika
- Polecenie ID3D10InfoQueue::GetMessage jest używane do pobierania komunikatów (które przechodzą przez opcjonalny filtr pobierania).
Kontrolki rejestru
Użyj kluczy rejestru, aby dostosować ustawienia filtru, punkty przerwania i wyciszyć wyjście debugowania. Warstwa debugowania sprawdzi te ścieżki pod kątem kluczy rejestru; zostanie użyta pierwsza znaleziona ścieżka.
- HKCU\Software\Microsoft\Direct3D\<podklucz zdefiniowany przez użytkownika>
- HKLM\Software\Microsoft\Direct3D\<podklucz zdefiniowany przez użytkownika>
- HKCU\Software\Microsoft\Direct3D
Gdzie:
- HKCU oznacza HKEY_CURRENT_USER, a HKLM oznacza HKEY_LOCAL_MACHINE.
- <podklucz zdefiniowany przez użytkownika> jest dowolną nazwą do przechowywania ustawień debugowania dla aplikacji
Filtrowanie komunikatów debugowania przy użyciu kluczy rejestru
Jeśli rejestr zawiera klucz InfoQueueStorageFilterOverride (i jest inny niż zero), komunikaty (i dane wyjściowe debugowania) można filtrować, dodając następujące kontrolki rejestru.
- DWORD Mute_CATEGORY_* — debuguj dane wyjściowe, jeśli ten klucz jest inny niż zero.
- DWORD Mute_SEVERITY_*: wyjście debugowania jest wyłączone, jeśli ten klucz jest inny niż zero.
- DWORD Mute_ID_* — nazwa lub numer wiadomości mogą być używane dla * (podobnie jak w przypadku BreakOn_ID_* opisanych wcześniej). Dane wyjściowe debugowania są wyłączone, jeśli ten klucz jest inny niż zero.
- DWORD Unmute_SEVERITY_INFO — wyjście debugowania jest włączone, jeśli ten klucz ma wartość inną niż zero. Domyślnie, po włączeniu funkcji InfoQueueStorageFilterOverride, komunikaty debugowania o poziomie INFO są wyciszone — dlatego ten klucz pozwala na ponowne ich włączenie.
Te kontrolki zmieniają, czy komunikat jest rejestrowany, czy wyświetlany; nie mają wpływu na to, czy interfejs API przechodzi lub kończy się niepowodzeniem.
Ustawianie warunków przerwania przy użyciu kluczy rejestru
Aplikacje mogą być wymuszane na przerwanie komunikatu przy użyciu następujących kluczy rejestru.
EnableBreakOnMessage — ten klucz umożliwia zatrzymywanie na komunikatach (i powoduje ignorowanie ustawień SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID()). Faktyczne komunikaty, na których należy przerwać, są zdefiniowane przy użyciu jednej lub więcej wartości BreakOn_*, zdefiniowanych poniżej.
- BreakOn_CATEGORY_* — Przerwij na komunikaty przechodzące przez filtry pamięci masowej. * jest jednym z komunikatów kategorii D3D10_MESSAGE_CATEGORY.
- BreakOn_SEVERITY_* — przerwij przy dowolnym komunikacie przechodzącym przez filtry pamięci masowej. * jest jednym z komunikatów D3D10_MESSAGE_SEVERITY_.
- BreakOn_ID_* — Przerwij na każdym komunikacie przechodzącym przez filtry pamięci. * jest jednym z komunikatów D3D10_MESSAGE_ID_ lub może być wartością liczbową wyliczenia błędu. Na przykład, załóżmy, że komunikat o identyfikatorze "D3D10_MESSAGE_ID_HYPOTHETICAL" miał wartość 123 w wyliczeniu D3D10_MESSAGE_ID. W takim przypadku utworzenie wartości BreakOn_ID_HYPOTHETICAL=1 lub BreakOn_ID_123=1 spowoduje przerwanie działania po napotkaniu komunikatu o identyfikatorze D3D10_MESSAGE_ID_HYPOTHETICAL.
Wyciszanie wyników debugowania przy użyciu kluczy rejestru
Dane wyjściowe debugowania można wyciszyć przy użyciu klucza MuteDebugOutput. Obecność tej wartości w rejestrze wymusza zastąpienie metody ID3D10InfoQueue::SetMuteDebugOutput. MuteDebugOutput zatrzymuje komunikaty, które przechodzą przez filtr magazynowania, aby nie zostały wysłane do danych wyjściowych debugowania.
Wyłączanie komunikatów warstwy debugowania
Komunikaty warstwy debugowania można wyłączyć pojedynczo lub w grupie w trakcie działania, określając filtry przy użyciu ID3D10InfoQueue::AddStorageFilterEntries. Argument pFilter do ID3D10InfoQueue::AddStorageFilterEntries przyjmuje strukturę D3D10_INFO_QUEUE_FILTER zawierającą listę dozwolonych i listę odmowy. Listy dozwolonych i niedozwolonych są opisane przez struktury D3D10_INFO_QUEUE_FILTER_DESC, które umożliwiają określenie filtrowania według kategorii, stopnia ważności oraz indywidualnego identyfikatora komunikatu.
Poniższy kod to przykład konfigurowania interfejsu ID3D10InfoQueue, aby zablokować komunikat 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 );
Tematy pokrewne
-
Funkcje API (Direct3D 10)