다음을 통해 공유


여러 대상 디버깅

여러 덤프 파일 또는 라이브 사용자 모드 애플리케이션을 동시에 디버그할 수 있습니다. 각 대상에는 하나 이상의 프로세스가 포함되며 각 프로세스에는 하나 이상의 스레드가 포함됩니다.

이러한 대상도 시스템으로 그룹화됩니다. 시스템은 쉽게 식별하고 조작할 수 있도록 그룹화된 대상 집합입니다. 시스템은 다음과 같이 정의됩니다.

  • 각 커널 모드 또는 사용자 모드 덤프 파일은 별도의 시스템입니다.

  • Dbgsrv와 같은 프로세스 서버를 사용하여 서로 다른 컴퓨터에서 라이브 사용자 모드 애플리케이션을 디버깅하는 경우 각 애플리케이션은 별도의 시스템입니다.

  • 로컬 컴퓨터에서 라이브 사용자 모드 애플리케이션을 디버깅하는 경우 애플리케이션이 단일 시스템으로 결합됩니다.

현재 또는 활성 시스템은 현재 디버깅 중인 시스템입니다.

여러 대상 획득

첫 번째 대상은 일반적인 방식으로 획득됩니다.

.attach(프로세스에 연결) 또는 .create(프로세스 만들기) 명령과 g(Go) 명령을 사용하여 추가 라이브 사용자 모드 애플리케이션을 디버그할 수 있습니다.

.opendump(덤프 파일 열기) 명령과 g(Go) 명령을 사용하여 추가 덤프 파일을 디버그할 수 있습니다. 디버거가 시작될 때 여러 덤프 파일을 열 수도 있습니다. 여러 덤프 파일을 열려면 명령에 여러 -z 스위치를 포함하고 각각 다른 파일 이름을 포함합니다.

프로세스가 다른 시스템에 있더라도 이전 명령을 사용할 수 있습니다. 각 시스템에서 프로세스 서버를 시작한 다음 .attach 또는 .create와 함께 -premote 매개 변수를 사용하여 적절한 프로세스 서버를 식별해야 합니다. -premote 매개 변수를 지정하지 않고 .attach 또는 .create 명령을 다시 사용하는 경우 디버거는 현재 시스템에 프로세스를 연결하거나 만듭니다.

시스템 및 대상 조작

디버깅이 시작되면 현재 시스템은 디버거가 가장 최근에 연결한 시스템입니다. 예외가 발생하면 현재 시스템은 이 예외가 발생한 시스템으로 전환됩니다.

한 대상을 닫고 다른 대상을 계속 디버그하려면 .kill(프로세스 종료) 명령을 사용합니다. .detach(프로세스에서 분리) 명령 또는 WinDbg의 디버그 | 디버기 메뉴 명령을 대신 분리합니다. 이러한 명령은 대상에서 디버거를 분리하지만 대상은 실행 상태로 둡니다.

여러 시스템의 디버깅을 제어하려면 다음 방법을 사용할 수 있습니다.

이러한 명령을 사용하여 현재 시스템을 선택하고 표준 명령을 사용하여 현재 프로세스 및 스레드를 선택하면 메모리 및 레지스터를 표시하는 명령의 컨텍스트를 확인할 수 있습니다.

그러나 이러한 프로세스의 실행을 구분할 수는 없습니다. g(Go) 명령은 항상 모든 대상이 함께 실행되도록 합니다.

명령 이 디버깅의 각 유형에 대해 다르게 동작하기 때문에 라이브 대상을 디버그하고 대상을 함께 덤프하는 경우 복잡성이 있습니다. 예를 들어 현재 시스템이 덤프 파일일 때 g(Go) 명령을 사용하면 디버거가 실행되기 시작하지만 중단 명령이 덤프 파일 디버깅에 유효한 것으로 인식되지 않으므로 디버거로 다시 침입할 수 없습니다.

예시

세 개의 덤프 파일을 동시에 사용하려면 WinDbg가 시작될 때 -z 옵션을 사용하여 로드할 수 있습니다.

windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp

자세한 내용은 WinDbg 명령줄 옵션을 참조 하세요. .opendump 및 g(Go) 명령을 사용하여 디버거에서 추가 덤프 파일을 로드할 수도 있습니다.

|| 사용 (시스템 상태) 명령으로 세 시스템이 모두 있는지 확인합니다.

||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   1 User mini dump: C:\paint.dmp
   2 User mini dump: c:\calc.dmp

g(Go) 명령을 사용하여 덤프 파일의 로드를 완료합니다.

||0:0:007> g

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Symbol search path is: srv*
Executable search path is: 
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun  9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3

그런 다음 | |을(를) 사용합니다.s(현재 시스템 설정) 명령을 사용하여 현재 시스템을 시스템 1로 설정한 다음 현재 시스템을 표시합니다.

||1:1:017> ||1s
||1:1:017> ||
   0 User mini dump: c:\notepad.dmp
.  1 User mini dump: c:\paint.dmp
   2 User mini dump: c:\calc.dmp

현재 덤프 파일을 확인했으면 .detach 명령을 사용할 수 있습니다.

||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3
Detached
||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   2 User mini dump: c:\calc.dmp

리소스

디버깅에 대한 자세한 내용은 다음 리소스를 참조하세요.

  • Mario Hewardt 및 Daniel Pravat의 고급 Windows 디버깅

  • Windows 디버깅 내부: Tarik Soulami의 Windows 디버깅 및 추적 전략에 대한 실용적인 가이드

  • 파벨 요시포비치, 알렉스 이온스쿠, 마크 E. 루시노비치, 데이비드 에이 솔로몬의 Windows 내부

동영상

조각 모음 도구 쇼 WinDbg 에피소드 13-29: </show/defrag-tools/>