2009-07-27 2 views
1

나는 BSoD를 직접적으로 피하는 드라이버를 가지고 있으며, Windows Vista의 화면을 여러 가지 색의 점들과 줄무늬가없는 검은 색으로 변하게합니다. 나중에 시스템에서 메모리 덤프를 찾고 DbgView가 멋지게 나에게 스택 추적을 표시합니다 (이 스택이 왜곡되어 있고 일부가 잘못되었을 수 있음을 나타냄). 안타깝게도, 스택에서 발견 된 명령은 분명히 모든 것을 무너 뜨리는 코드 부분에서는 보이지 않습니다. (전체 루틴은 그대로 둘 수 있지만, 그 부분은 생략 할 수 있습니다.)메모리 덤프의 DbgPrint?

외부 디버거에서 디버그 메시지를 읽으려면 메모리 덤프 또는 직렬 포트에서 디버그 메시지를 얻는 방법을 알고 있습니까? (디버거가 연결되어 있으면 테스트 시스템이 멈추지 만 원격 디버깅 방법과 이유에 대해서는 충분히 알지 못합니다.)

찾아보기 때문에 내 코드가 실패한 지점을 알고 싶습니다. 코드를 통해 나에게는 괜찮은 것처럼 보입니다. 조금 쓸데 없으며 힌트가 필요합니다.

답변

3

설명 디버깅 세션을 설정하는 방법은 MSDN입니다.

설정 절차는 다음과 같습니다

  1. 설정 2의 PC 환경을 개발하고 디버그 대상이되는 두 번째 당신과 처음. (Vista + Vista64가 가장 잘 작동했습니다.)
  2. Firewire 케이블이나 Null 모뎀 케이블을 사용하여 디버거 연결을 설정하십시오. (Null-Modem은 거의 항상 작동하지만 Firewire는 성능 측면에서 볼 때 더 좋습니다.) USB는 값 비싸고 나에게 적합하지 않습니다 ...)
  3. '디버그'모드로 부팅하도록 대상 컴퓨터 설정 MSDN
  4. WinDbg가 실행 중이고 커널 연결을 기다리는 동안 대상 컴퓨터를 디버그 모드로 부팅하십시오.
  5. 부팅하는 동안 WinDbg는 대상 시스템에 대한 메시지를 인쇄해야합니다. 여기서는 DbgPrint 메시지 등을 볼 수 있습니다 (Vista에서는 XP가 아닌 모든 DbgPrint가 비활성화되어 있습니다). link
  6. 중단 점을 정의하여 WinDbg의 모듈에 중단 점을 설정할 수 있습니다.

PS : bcdedit은 때때로 디버그 모드를 설정하지 못합니다. 나는 이유가 없다. 하지만 디버그 매개 변수를 말해야하는 순서가 있습니다. 서로 다른 조합을 시도하는 것은 놀라운 일을합니다 ....

프로세스를 중단 할 때 WinDbg에서 명령을 사용할 수 있습니다. 흥미로운 것들 중 몇 :

  • LM 표시 현재의 LM m 패턴
  • 을로드 된 모든 모듈을 검색 조건 (예 : "LM 분의 KERNEL32 *"를 만족 표시 모든 모듈
  • X 모듈 이름! function_name_pattern은 모듈의 기호를 나열합니다 (예 : "kernel32! Create *")
  • bl은 현재 설정된 모든 중단 점을 나열합니다.
  • bp module_name! function_name은 지정된 함수의 시작 부분에 중단 점을 설정합니다.
  • BC *는 "BP"
  • .reload는/u는 다시로드 x.sys 모듈 디버그 설정을 x.sys 모든 중단 점을
  • .hh 혈압을 표시 도움을 삭제합니다. (이것은 프로젝트를 다시 빌드하고 'x.pdb를 만들 수 없습니다 ...'메시지가 표시 될 때 유용합니다).

는 Vista에서 모든 DbgPrint 출력을 사용 :

enable_dbg_print_vista.reg 내 희망을 유지하기위한

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter] 
"DEFAULT"=dword:0000000f 
+0

감사합니다. 내 주요 문제로 밝혀졌다. 나는 "가라"를 충분히 누르지 않았다는 것이었다. 따라서 디버그 시스템에서 빈 디버거 창을 사용하여 테스트 시스템이 정지 된 것처럼 보였습니다. 쓸데없는 것 같아. (하지만 명령 목록은 매우 유용합니다.) 역 추적을 위해 k, kb, kp, kd을 추가하고 u, uf, ... 명령을 사용하여 역 어셈블을위한 명령을 추가합니다. –

+0

또한 테스트 한 컴퓨터에서 DbgView를 실행해야합니다. 그렇지 않으면 내 DbgPrint가 커널 디버거에 표시되지 않기 때문입니다. 안타깝게도 Dbgview가 실행 중일 때 전체 설치가 멈추는 경우가 있습니다. 아마 호스트의 플래그를 켜야 만합니다 ... –

+0

형식을 올바르게 가져올 수 있도록 답변을 설정에 추가했습니다. – Christopher

관련 문제