Настройка выходных данных отладки с помощью ID3D10InfoQueue (Direct3D 10)
Информационная очередь управляется интерфейсом (см . id3D10InfoQueue Interface), который хранит, извлекает и фильтрует сообщения отладки. Очередь состоит из: очереди сообщений, необязательного стека фильтров хранилища и необязательного стека фильтров извлечения. Стек фильтра хранилища можно использовать для фильтрации сообщений, которые вы хотите сохранить; Стек фильтра извлечения можно использовать для фильтрации хранящихся сообщений. После фильтрации сообщения сообщение будет выведено в окно отладки и сохранено в соответствующем стеке.
а именно:
- Вызовите ID3D10InfoQueue::AddApplicationMessage для создания определяемых пользователем сообщений
- Вызов ID3D10InfoQueue::GetMessage используется для получения сообщений (которые передают необязательный фильтр извлечения).
Элементы управления реестром
Используйте разделы реестра для настройки параметров фильтра, точек останова и отключения выходных данных отладки. Уровень отладки будет проверка эти пути для разделов реестра. Будет использован первый найденный путь.
- HKCU\Software\Microsoft\Direct3D\<определяемый пользователем подраздел>
- HKLM\Software\Microsoft\Direct3D\<определяемый пользователем подраздел>
- HKCU\Software\Microsoft\Direct3D
Где:
- HKCU — HKEY_CURRENT_USER, а HKLM — HKEY_LOCAL_MACHINE.
- <определяемый пользователем подраздел> — это произвольное имя для хранения параметров отладки для приложения.
Фильтрация сообщений отладки с помощью разделов реестра
Если реестр содержит раздел InfoQueueStorageFilterOverride (и не равен нулю), сообщения (и выходные данные отладки) можно отфильтровать, добавив следующие элементы управления реестра.
- DWORD Mute_CATEGORY_* — выходные данные отладки, если этот ключ не равен нулю.
- DWORD Mute_SEVERITY_* — выходные данные отладки отключены, если этот ключ не равен нулю.
- DWORD Mute_ID_* — имя или номер сообщения можно использовать для параметра * (как и для BreakOn_ID_*, описанных выше). Выходные данные отладки отключены, если этот ключ не равен нулю.
- DWORD Unmute_SEVERITY_INFO — выходные данные отладки включены, если этот ключ не равен нулю. По умолчанию при включении InfoQueueStorageFilterOverride отладочные сообщения с уровнем серьезности INFO отключены, поэтому для этого ключа можно снова включить INFO.
Эти элементы управления изменяют запись или отображение сообщения; Они не влияют на то, проходит ли API или завершается сбоем.
Настройка условий останова с помощью разделов реестра
Приложения могут быть вынуждены прервать выполнение сообщения с помощью следующих разделов реестра.
EnableBreakOnMessage — этот ключ включает прерывание сообщений (и вызывает пропускание параметров SetBreakOnCategory()/SetBreakOnSeverity()/SetBreakOnID(). Фактические сообщения для прерывания определяются с помощью одного или нескольких значений BreakOn_*, определенных ниже.
- BreakOn_CATEGORY_* — прервите все сообщения, проходящие через фильтры хранилища. * является одним из D3D10_MESSAGE_CATEGORY сообщений.
- BreakOn_SEVERITY_* — прервите все сообщения, проходящие через фильтры хранилища. * является одним из D3D10_MESSAGE_SEVERITY_ сообщений.
- BreakOn_ID_* — прервать все сообщения, проходящие через фильтры хранилища. * является одним из D3D10_MESSAGE_ID_ сообщений или может быть числовым значением перечисления ошибок. Например, предположим, что сообщение с идентификатором "D3D10_MESSAGE_ID_HYPOTHETICAL" имеет значение 123 в перечислении D3D10_MESSAGE_ID. В этом случае создание значения BreakOn_ID_HYPOTHETICAL=1 или BreakOn_ID_123=1 приведет к тому же — прерывание при обнаружении сообщения с идентификатором D3D10_MESSAGE_ID_HYPOTHETICAL.
Отключение выходных данных отладки с помощью разделов реестра
Выходные данные отладки можно отключить с помощью ключа MuteDebugOutput. Наличие этого значения в реестре приводит к переопределении метода ID3D10InfoQueue::SetMuteDebugOutput infoQueue. MuteDebugOutput останавливает отправку сообщений, которые передают фильтр хранилища, в выходные данные отладки.
Отключение сообщений уровня отладки
Сообщения уровня отладки можно отключить отдельно или в группе во время выполнения, указав фильтры с помощью ID3D10InfoQueue::AddStorageFilterEntries. Аргумент pFilter для ID3D10InfoQueue::AddStorageFilterEntries принимает D3D10_INFO_QUEUE_FILTER структуру, содержащую список разрешений и список запрещенных. Списки разрешений и запретов описываются D3D10_INFO_QUEUE_FILTER_DESC структурами, которые позволяют указать фильтрацию по категориям, серьезности и идентификатору отдельного сообщения.
Следующий код является примером настройки интерфейса ID3D10InfoQueue для запрета сообщения 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 );
Связанные темы