Windows VISTA, Windows 7 이상 버전에서 Debug (DebugView, WinDbg) 메세지 출력
2008. 7. 15. 09:31
[ 문제 ]
Windows VISTA 이상 버전의 윈도우즈에서는 기본적으로 DbgPrint 와 KdPrint를 이용하여 출력하는 디버그 메세지가 출력되지 않는다.
[ 원인 ]
Windows VISTA에서는 DbgPrint 및 KdPrint가 각각 DbgPrintEx, KdPrintEx함수로 매핑되어 있다. 우선, DbgPrintEx의 원형은 아래와 같다.
ULONG
DbgPrintEx(
IN ULONG ComponentId,
IN ULONG Level,
IN PCHAR Format,
. . . . [arguments]
);
* 참고 * DbgPrintEx나 KdPrintEx나 동일하다.
VISTA에서 DbgPrint호출시 아래처럼 매핑되어 호출된다.
DbgPrint ( "Hello World" );
↓
DbgPrintEx ( DPFLTR_DEFAULT_ID, DPFLTR_INFO_LEVEL, "Hello World" );
중요한 것은, DPFLTR_INFO_LEVEL은 0x3으로 정의되어 있으며 이 레벨은 기본적으로 출력이 제한되어 있다는 점이다.
[ 해결 ]
- KdPrintEx 혹은 DbgPringEx사용한 후, Level 인자에 DPFLTR_ERROR_LEVEL 입력
- Kernel Debugger가 활성되어 있을경우, WinDbg를 사용하여 적절한 컴포넌트 필터 Mask를 세팅 (재 부팅 시 초기화 됨)
DPFLTR_INFO_LEVEL 로 켜고 싶을 때kd > ed Kd_DEFAULT_MASK 8DPFLTR_ERROR_LEVEL 로 켜고 싶을 때kd > ed Kd_DEFAULT_MASK 0xF디버그 메시지를 끄고 싶을 때kd > ed Kd_DEFAULT_MASK 0
- 레지스트리 수정을 통해 (재 부팅 필요)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
이하에 아래의 키를 추가
- Debug Print Filter
위 키 내부에 아래의 DWORD(32-bit) 값을 추가
DEFAULT의 값은 0xF 로 설정
- DEFAULT
출처
http://msdn.microsoft.com/en-us/library/ff551519.aspx
http://www.osronline.com/article.cfm?article=295