Поделиться через


Отладка выходных функций

[Функция, связанная с этой страницей 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 (определенная в библиотеке базовых классов) вызывает их автоматически.

Служебные программы отладки