출력 함수 디버그
[이 페이지와 연결된 기능인 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은 이러한 함수를 호출할 필요가 없습니다.
관련 항목