Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Очередь сведений управляется интерфейсом (см. ИНТЕРФЕЙС ID3D10InfoQueue), который хранит, извлекает и фильтрует сообщения отладки. Очередь состоит из: очереди сообщений, необязательного стека фильтров хранилища и необязательного стека фильтров извлечения. Стек фильтров хранилища можно использовать для фильтрации нужных сообщений; стек фильтров извлечения можно использовать для фильтрации сообщений, которые вы хотите извлечь. После фильтрации сообщения сообщение будет напечатано в окне отладки и хранится в соответствующем стеке.
Вообще:
- Вызвать 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 );
Связанные разделы
-
функции API (Direct3D 10)