다음을 통해 공유


출력 함수 디버그

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

DirectShow 기본 클래스는 디버깅 정보를 표시하기 위한 여러 매크로를 제공합니다.

함수 Description
DbgCheckModuleLevel 지정된 메시지 유형 및 수준에 대해 로깅을 사용할 수 있는지 여부를 확인합니다.
DbgDumpObjectRegister 활성 개체에 대한 정보를 표시합니다.
DbgInitialise 디버그 라이브러리를 초기화합니다.
DbgLog 지정된 형식 및 수준에 대해 로깅을 사용하는 경우 문자열을 디버그 출력 위치로 보냅니다.
DbgOutString 문자열을 디버그 출력 위치로 보냅니다.
DbgSetModuleLevel 하나 이상의 메시지 유형에 대한 로깅 수준을 설정합니다.
DbgTerminate 디버그 라이브러리를 정리합니다.
DisplayType 미디어 형식에 대한 정보를 디버그 출력 위치로 보냅니다.
DumpGraph 필터 그래프에 대한 정보를 디버그 출력 위치로 보냅니다.
GuidNames Uuids.h에 정의된 GUID를 나타내는 문자열을 포함하는 전역 배열입니다.
이름 디버그 전용 문자열을 생성합니다.
참고 문자열을 디버그 출력 위치로 보냅니다.
생각나 게 컴파일 시간에 미리 알림을 생성합니다.

 

레지스트리 키

DirectShow의 디버그 출력 함수는 레지스트리 키 집합을 사용합니다. 이러한 레지스트리 키의 위치는 Windows 버전에 따라 달라집니다.

Windows Vista 이전에는 디버깅 키가 다음 경로 아래에 있습니다.

Hkey_local_machine\소프트웨어\디버그

Windows Vista 이상에서는 다음 경로 아래에 있습니다.

Hkey_local_machine\소프트웨어\Microsoft\Directshow\디버그

타사 필터의 경우 위치는 필터를 빌드하는 데 사용된 DirectShow 기본 클래스 버전에 따라 달라집니다. Windows Vista용 Windows SDK에 포함된 버전은 최신 경로를 사용합니다. 이전 버전에서는 이전 경로를 사용했습니다.

다음 설명에서 DebugRoot> 레이블<은 이러한 두 경로를 나타내는 데 사용됩니다. Windows 버전 또는 기본 클래스 버전에 따라 올바른 경로를 대체합니다.

디버그 로깅

DirectShow는 다음 표에 표시된 여러 메시지 유형을 정의합니다.

Description
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")));

모든 모듈은 각 메시지 유형에 대해 자체 디버깅 수준을 설정할 수 있습니다. 모듈LoadLibrary 함수를 사용하여 로드할 수 있는 DLL 또는 실행 파일입니다. 모듈의 디버깅 수준은 다음 키 아래에 레지스트리에 표시됩니다.

Hkey_local_machine\<DebugRoot>\<ModuleName>\<MessageType>

여기서 <메시지 유형> 은 초기 "LOG_"을 뺀 메시지 유형입니다(예: LOG_LOCKING 메시지에 대한 LOCKING ). 모듈이 로드되면 디버그 라이브러리는 레지스트리에서 모듈의 로깅 수준을 찾습니다. 레지스트리 키가 없으면 디버그 라이브러리에서 키를 만듭니다.

모듈은 DbgSetModuleLevel 함수를 사용하여 런타임에 자체 수준을 설정할 수도 있습니다. 디버그 출력에 메시지를 보내려면 DbgLog 매크로를 호출합니다. 다음 예제에서는 LOG_TRACE 형식의 수준 3 메시지를 만듭니다.

다음 레지스트리 키를 사용하여 전역 로깅 수준을 지정할 수도 있습니다.

\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>

디버그 라이브러리는 더 큰 수준, 전역 수준 또는 모듈 수준을 사용합니다.

출력 위치 디버그

디버그 출력 위치는 다른 레지스트리 키에 의해 결정됩니다.

Hkey_local_machine\<DebugRoot>\<Modile Name>\LogToFile

이 키의 값이 Console이면 출력이 콘솔 창으로 이동합니다. 값이 Deb, Debug, Debugger또는 빈 문자열인 경우 출력은 디버거 창으로 이동합니다. 그렇지 않으면 출력이 레지스트리 키로 지정된 파일에 기록됩니다.

실행 파일이 DirectShow 디버그 라이브러리를 사용하기 전에 DbgInitialise 함수를 호출해야 합니다. 그런 다음 DbgTerminate 함수를 호출해야 합니다. DLL 진입점(기본 클래스 라이브러리에 정의됨)이 자동으로 호출하므로 DLL은 이러한 함수를 호출할 필요가 없습니다.

디버깅 유틸리티