Отладка выходных функций
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Базовые классы DirectShow предоставляют несколько макросов для отображения сведений об отладке.
Функция | Описание |
---|---|
DbgCheckModuleLevel | Проверяет, включено ли ведение журнала для заданных типов и уровне сообщений. |
DbgDumpObjectRegister | Отображает сведения об активных объектах. |
DbgInitialise | Инициализирует библиотеку отладки. |
DbgLog | Отправляет строку в выходное расположение отладки, если ведение журнала включено для указанного типа и уровня. |
DbgOutString | Отправляет строку в выходное расположение отладки. |
DbgSetModuleLevel | Задает уровень ведения журнала для одного или нескольких типов сообщений. |
DbgTerminate | Очищает библиотеку отладки. |
DisplayType | Отправляет сведения о типе носителя в выходное расположение отладки. |
DumpGraph | Отправляет сведения о графе фильтра в расположение выходных данных отладки. |
GuidNames | Глобальный массив, содержащий строки, представляющие идентификаторы GUID, определенные в Uuids.h. |
ИМЯ | Создает строку, доступную только для отладки. |
ПРИМЕЧАНИЕ | Отправляет строку в выходное расположение отладки. |
НАПОМНИТЬ | Создает напоминание во время компиляции. |
Разделы реестра
Функция вывода отладки в DirectShow использует набор разделов реестра. Расположение этих разделов реестра зависит от версии Windows.
До Windows Vista ключи отладки находились по следующему пути:
HKEY_LOCAL_MACHINE\ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ\Отладки
В Windows Vista или более поздних версиях они находятся по следующему пути:
HKEY_LOCAL_MACHINE\ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ\Microsoft\Directshow\Отладки
Для сторонних фильтров расположение зависит от того, какая версия базовых классов DirectShow использовалась для построения фильтра. Версия, включенная в пакет Windows SDK для Windows Vista, использует более новый путь. В предыдущих версиях использовался старый путь.
В следующих примечаниях для указания этих двух путей используется метка <DebugRoot> . Замените правильный путь в зависимости от версии Windows или версии базовых классов.
Ведение журнала отладки
DirectShow определяет несколько типов сообщений, как показано в следующей таблице.
Значение | Описание |
---|---|
LOG_ERROR | Уведомление об ошибке. |
LOG_LOCKING | Блокировка и разблокировка критически важных разделов. |
LOG_MEMORY | Выделение памяти, создание и уничтожение объектов. |
LOG_TIMING | Измерения времени и производительности. |
LOG_TRACE | Общая трассировка вызовов. |
CUSTOM1–CUSTOM5 | Доступно для пользовательских сообщений отладки |
Каждая из функций ведения журнала отладки DirectShow определяет тип сообщения и уровень журнала. Сообщение отладки отображается только в том случае, если текущий уровень отладки для этого типа сообщения равен или превышает уровень, указанный в функции ведения журнала. В противном случае сообщение игнорируется.
Например, следующий код выводит строку "Это сообщение отладки", если уровень LOG_TRACE равен 3 или выше:
DbgLog((LOG_TRACE, 3, TEXT("This is a debug message")));
Каждый модуль может задать собственный уровень отладки для каждого типа сообщения. ( Модуль — это библиотека DLL или исполняемый файл, который можно загрузить с помощью функции LoadLibrary .) Уровни отладки модуля отображаются в реестре в следующем разделе:
HKEY_LOCAL_MACHINE\<DebugRoot>\<ModuleName>\<MessageType>
Где <Тип> сообщения — это тип сообщения за вычетом начального "LOG_", например LOCKING для LOG_LOCKING сообщений. При загрузке модуля библиотека отладки находит уровни ведения журнала модуля в реестре. Если разделы реестра не существуют, библиотека отладки создает их.
Модуль также может задавать собственные уровни во время выполнения с помощью функции DbgSetModuleLevel . Чтобы отправить сообщение в выходные данные отладки, вызовите макрос DbgLog . В следующем примере создается сообщение уровня 3 типа LOG_TRACE:
Вы также можете указать глобальные уровни ведения журнала с помощью следующего раздела реестра:
\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>
Библиотека отладки использует любой уровень выше, глобальный уровень или уровень модуля.
Расположение выходных данных отладки
Расположение выходных данных отладки определяется другим разделом реестра:
HKEY_LOCAL_MACHINE\<Имя модиля DebugRoot>\<LogToFile>\
Если этот ключ имеет Console
значение , выходные данные переходят в окно консоли. Если значение равно Deb
, Debug
, Debugger
, или пустой строке, выходные данные переходят в окно отладчика. В противном случае выходные данные записываются в файл, указанный в разделе реестра.
Прежде чем исполняемый файл использует библиотеку отладки DirectShow, он должен вызвать функцию DbgInitialise . После этого необходимо вызвать функцию DbgTerminate . Библиотекам DLL не нужно вызывать эти функции, так как точка входа DLL (определенная в библиотеке базовых классов) вызывает их автоматически.
Связанные темы