대상 제어
사용자 모드 또는 커널 모드의 대상 컴퓨터에서 대상 애플리케이션을 디버깅하는 동안 대상을 실행하거나 중지할 수 있습니다.
-b 명령줄 옵션을 사용하지 않는 한 디버거가 커널 모드 대상에 연결되면 대상 시스템이 응답하지 않거나(즉, 크래시됨) 이전 커널 디버깅 작업으로 인해 대상 시스템이 계속 중지됩니다.
디버거가 시작되거나 사용자 모드 대상에 연결되면 -g 명령줄 옵션을 사용하지 않는 한 디버거는 즉시 대상을 중지합니다. 자세한 내용은 초기 중단점을 참조 하세요.
대상이 실행 중일 때
대상이 실행 중이면 대부분의 디버거 작업을 사용할 수 없습니다.
실행 중인 대상을 중지하려면 Break 명령을 실행할 수 있습니다. 이 명령을 사용하면 디버거가 대상에 침입합니다. 즉, 디버거가 대상을 중지하고 모든 컨트롤이 디버거에 제공됩니다. 애플리케이션이 즉시 중단되지 않을 수 있습니다. 예를 들어 모든 스레드가 현재 시스템 코드를 실행 중이거나 대기 작업 중인 경우 제어가 애플리케이션의 코드로 반환된 후에만 애플리케이션이 중단됩니다.
실행 중인 대상이 예외를 발견하거나, 특정 이벤트가 발생하거나, 중단점 이 적중되거나, 애플리케이션이 정상적으로 닫히면 대상이 디버거로 중단됩니다. 이 작업은 대상을 중지하고 디버거에 대한 모든 제어를 제공합니다. 디버거 명령 창에 메시지가 표시되고 오류, 이벤트 또는 중단점에 대해 설명합니다.
대상이 중지된 경우
대상의 실행을 시작하거나 제어하려면 다음을 수행할 수 있습니다.
애플리케이션 실행을 시작 하려면 Go 명령을 실행합니다.
애플리케이션을 한 번에 하나씩 단계별로 실행하려면 한 단계씩 실행 또는 단계별 실행 명령을 사용합니다. 함수 호출이 발생하면 Step Into 가 함수를 입력하고 각 명령을 계속 단계별로 실행합니다. Step Over 는 함수 호출을 단일 단계로 처리합니다. 디버거가 어셈블리 모드에 있는 경우 단계별 실행은 한 번에 하나의 컴퓨터 명령이 발생합니다. 디버거가 소스 모드에 있는 경우 한 번에 하나의 소스 줄이 스테핑됩니다.
현재 함수를 완료하고 반환이 발생할 때 중지하려면 프로시전 또는 추적 및 조사식 명령을 사용합니다. Step Out 명령은 현재 함수가 끝날 때까지 계속됩니다. 추적 및 조사식 은 현재 함수가 종료될 때까지 계속되며 함수 호출 요약도 표시합니다. 그러나 해당 함수의 첫 번째 명령에서 추적 및 조사식 명령을 실행해야 합니다.
예외가 발생하는 경우 예외 처리됨으로 이동 및 예외 처리되지 않음 명령을 사용하여 실행을 다시 시작하고 예외 상태를 제어할 수 있습니다. (예외에 대한 자세한 내용은 를 참조하세요 .예외 및 이벤트 제어.)
(WinDbg만 해당) 디스어셈블리 창 또는 원본 창에서 줄을 선택한 다음 커서로 실행 명령을 사용하면 선택한 줄이 나타날 때까지 프로그램이 실행됩니다.
(사용자 모드만 해당) 대상 애플리케이션을 닫고 처음부터 다시 시작하려면 Restart 명령을 사용합니다. 디버거가 만든 프로세스에서만 이 명령을 사용할 수 있습니다. 프로세스가 다시 시작되면 즉시 디버거로 중단됩니다.
(WinDbg만 해당) 대상 애플리케이션을 닫고 디버거를 지우려면 디버깅 중지 명령을 사용합니다. 이 명령을 사용하면 다른 대상의 디버깅을 시작할 수 있습니다.
명령 양식
대상의 실행을 시작하거나 제어하기 위한 대부분의 명령은 텍스트 명령, 메뉴 명령, 도구 모음 단추 및 바로 가기 키로 존재합니다. 기본 텍스트 명령으로 CDB, KD 또는 WinDbg에서 이러한 명령을 사용할 수 있습니다. 명령의 텍스트 형식은 프로그램 카운터의 위치를 변경하거나 고정된 수의 명령 실행과 같은 추가 옵션을 자주 지원합니다. WinDbg에서 메뉴 명령, 도구 모음 단추 및 바로 가기 키를 사용할 수 있습니다.
다음 양식에서 명령을 사용할 수 있습니다.
명령 | WinDbg 명령 | WinDbg 바로 가기 키 | 효과 |
---|---|---|---|
디버그 | 커서까지 실행 |
F7 Ctrl+F10 |
(WinDbg만 해당) 커서가 표시하는 줄에 도달할 때까지 실행됩니다. |
|
디버그 | 디버깅 중지 |
SHIFT + F5 |
모든 디버깅을 중지하고 대상을 닫습니다. |
|
(CDB/KD만 해당) Ctrl+C |
디버그 | 휴식 |
Ctrl+나누기 |
실행이 중지되고 디버거가 대상에 침입합니다. |
디버그 | 다시 시작할 |
Ctrl+ Shift + F5 |
(사용자 모드에만 해당) 대상 애플리케이션을 다시 시작합니다. |
|
디버그 | 바둑 |
F5 |
대상은 자유롭게 실행됩니다. |
|
조건부 중단점 후에 실행을 다시 시작합니다. |
|||
디버그 | Go Handled Exception |
현재 예외가 처리된 것으로 처리된다는 점을 제외하고 g(Go)와 동일합니다. |
||
디버그 | 처리되지 않은 예외 이동 |
현재 예외가 처리되지 않은 것으로 처리된다는 점을 제외하고 g(Go)와 같습니다. |
||
디버그 | 한 단계씩 나가기 |
SHIFT + F11 |
대상은 현재 함수가 완료될 때까지 실행됩니다. |
|
디버그 | 단계별 실행 |
F10 |
대상은 하나의 명령을 실행합니다. 이 명령이 함수 호출인 경우 해당 함수는 단일 단계로 실행됩니다. |
|
대상은 지정된 주소에 도달할 때까지 실행됩니다. 이 함수의 모든 단계가 표시됩니다(하지만 호출된 함수의 단계는 표시되지 않음). |
|||
대상은 다음 호출 명령까지 실행됩니다. 현재 명령이 호출 명령인 경우 이 호출은 완전히 실행되고 다음 호출까지 실행이 계속됩니다. |
|||
대상은 호출 명령 또는 반환 명령에 도달할 때까지 실행됩니다. |
|||
대상은 조건부 또는 무조건 분기, 호출, 반환 및 시스템 호출을 비롯한 모든 종류의 분기 명령에 도달할 때까지 실행됩니다. |
|||
대상은 반환 명령에 도달할 때까지 실행됩니다. |
|||
디버그 | 한 단계씩 실행 |
F11 F8 |
대상은 하나의 명령을 실행합니다. 이 명령이 함수 호출인 경우 디버거는 해당 호출을 추적합니다. |
|
대상은 지정된 주소에 도달할 때까지 실행됩니다. 이 함수 및 호출된 함수의 모든 단계가 표시됩니다. |
|||
(커널 모드를 제외한 모든 모드는 x86 기반 시스템에서만) 대상은 다음 분기 명령에 도달할 때까지 실행됩니다. |
|||
대상은 다음 호출 명령까지 실행됩니다. 현재 명령이 호출 명령인 경우 새 호출에 도달할 때까지 명령이 추적됩니다. |
|||
대상은 호출 명령 또는 반환 명령에 도달할 때까지 실행됩니다. 현재 명령이 호출 명령 또는 반환 명령인 경우 새 호출 또는 반환에 도달할 때까지 명령이 추적됩니다. |
|||
대상은 조건부 또는 무조건 분기, 호출, 반환 및 시스템 호출을 비롯한 모든 종류의 분기 명령에 도달할 때까지 실행됩니다. 현재 명령이 분기 명령인 경우 새 분기 명령에 도달할 때까지 명령이 추적됩니다. |
|||
대상은 반환 명령에 도달할 때까지 실행됩니다. 현재 명령이 반환 명령인 경우 새 반환에 도달할 때까지 명령이 추적됩니다. |
|||
대상은 지정된 전체 함수가 완료될 때까지 실행됩니다. 그런 다음 통계가 표시됩니다. |
대상 컴퓨터를 다시 시작하는 방법에 대한 자세한 내용은 대상 컴퓨터 충돌 및 다시 부팅을 참조 하세요.
명령줄 옵션
애플리케이션을 시작하거나 로드할 때 즉시 중지하지 않으려면 -g 명령줄 옵션과 함께 CDB 또는 WinDbg를 사용합니다. 이 상황에 대한 자세한 내용은 초기 중단점을 참조 하세요.
CDB 및 WinDbg는 -G 명령줄 옵션도 지원합니다. 이 옵션을 사용하면 애플리케이션이 제대로 완료되면 디버깅 세션이 종료됩니다.
다음 명령은 처음부터 끝까지 애플리케이션을 실행하려고 시도하며 오류가 발생한 경우에만 디버거 프롬프트가 나타납니다.
cdb -g -G ApplicationName
-pt 명령줄 옵션을 사용하여 중단 시간 초과를 설정할 수 있습니다. 대상이 디버거와 통신할 수 없게 만들 수 있는 특정 문제가 있습니다. 이 시간 이후에 중단 명령이 실행되고 디버거가 대상에 침입할 수 없는 경우 디버거는 "중단 시간 초과" 메시지를 표시합니다.
이 시점에서 디버거는 대상에 침입하려는 시도를 중지합니다. 대신 디버거는 대상을 일시 중지하고 대상 애플리케이션을 검사(제어하지 않음)할 수 있습니다.
기본 제한 시간은 30초입니다.