다음을 통해 공유


대상 제어

사용자 모드 또는 커널 모드의 대상 컴퓨터에서 대상 애플리케이션을 디버깅하는 동안 대상을 실행하거나 중지수 있습니다.

-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+나누기

실행이 중지되고 디버거가 대상에 침입합니다.

.restart(대상 애플리케이션 다시 시작)

디버그 | 다시 시작할

Ctrl+ Shift + F5

(사용자 모드에만 해당) 대상 애플리케이션을 다시 시작합니다.

g(Go)

디버그 | 바둑

F5

대상은 자유롭게 실행됩니다.

gc(조건부 중단점에서 이동)

조건부 중단점 후에 실행을 다시 시작합니다.

gh(예외 처리로 이동)

디버그 | Go Handled Exception

현재 예외가 처리된 것으로 처리된다는 점을 제외하고 g(Go)와 동일합니다.

gn(예외가 처리되지 않은 상태에서 이동)

디버그 | 처리되지 않은 예외 이동

현재 예외가 처리되지 않은 것으로 처리된다는 점을 제외하고 g(Go)와 같습니다.

gu(위로 이동)

디버그 | 한 단계씩 나가기

SHIFT + F11

대상은 현재 함수가 완료될 때까지 실행됩니다.

p(단계)

디버그 | 단계별 실행

F10

대상은 하나의 명령을 실행합니다. 이 명령이 함수 호출인 경우 해당 함수는 단일 단계로 실행됩니다.

pa(한 단계씩 주소 지정)

대상은 지정된 주소에 도달할 때까지 실행됩니다. 이 함수의 모든 단계가 표시됩니다(하지만 호출된 함수의 단계는 표시되지 않음).

pc(한 단계씩 다음 통화)

대상은 다음 호출 명령까지 실행됩니다. 현재 명령이 호출 명령인 경우 이 호출은 완전히 실행되고 다음 호출까지 실행이 계속됩니다.

pct(다음 호출 또는 반환 단계)

대상은 호출 명령 또는 반환 명령에 도달할 때까지 실행됩니다.

ph(한 단계씩 다음 분기 지침)

대상은 조건부 또는 무조건 분기, 호출, 반환 및 시스템 호출을 비롯한 모든 종류의 분기 명령에 도달할 때까지 실행됩니다.

pt(다음 반환 단계)

대상은 반환 명령에 도달할 때까지 실행됩니다.

t(추적)

디버그 | 한 단계씩 실행

F11

F8

대상은 하나의 명령을 실행합니다. 이 명령이 함수 호출인 경우 디버거는 해당 호출을 추적합니다.

ta(주소 추적)

대상은 지정된 주소에 도달할 때까지 실행됩니다. 이 함수 및 호출된 함수의 모든 단계가 표시됩니다.

tb(다음 분기로 추적)

(커널 모드를 제외한 모든 모드는 x86 기반 시스템에서만) 대상은 다음 분기 명령에 도달할 때까지 실행됩니다.

tc(다음 호출로 추적)

대상은 다음 호출 명령까지 실행됩니다. 현재 명령이 호출 명령인 경우 새 호출에 도달할 때까지 명령이 추적됩니다.

tct(다음 호출 또는 반환으로 추적)

대상은 호출 명령 또는 반환 명령에 도달할 때까지 실행됩니다. 현재 명령이 호출 명령 또는 반환 명령인 경우 새 호출 또는 반환에 도달할 때까지 명령이 추적됩니다.

th(다음 분기 명령으로 추적)

대상은 조건부 또는 무조건 분기, 호출, 반환 및 시스템 호출을 비롯한 모든 종류의 분기 명령에 도달할 때까지 실행됩니다. 현재 명령이 분기 명령인 경우 새 분기 명령에 도달할 때까지 명령이 추적됩니다.

tt(다음 반환으로 추적)

대상은 반환 명령에 도달할 때까지 실행됩니다. 현재 명령이 반환 명령인 경우 새 반환에 도달할 때까지 명령이 추적됩니다.

wt(추적 및 조사식 데이터)

대상은 지정된 전체 함수가 완료될 때까지 실행됩니다. 그런 다음 통계가 표시됩니다.

대상 컴퓨터를 다시 시작하는 방법에 대한 자세한 내용은 대상 컴퓨터 충돌 및 다시 부팅을 참조 하세요.

명령줄 옵션

애플리케이션을 시작하거나 로드할 때 즉시 중지하지 않으려면 -g 명령줄 옵션과 함께 CDB 또는 WinDbg를 사용합니다. 이 상황에 대한 자세한 내용은 초기 중단점을 참조 하세요.

CDB 및 WinDbg는 -G 명령줄 옵션도 지원합니다. 이 옵션을 사용하면 애플리케이션이 제대로 완료되면 디버깅 세션이 종료됩니다.

다음 명령은 처음부터 끝까지 애플리케이션을 실행하려고 시도하며 오류가 발생한 경우에만 디버거 프롬프트가 나타납니다.

cdb -g -G ApplicationName 

-pt 명령줄 옵션을 사용하여 중단 시간 초과를 설정할 수 있습니다. 대상이 디버거와 통신할 수 없게 만들 수 있는 특정 문제가 있습니다. 이 시간 이후에 중단 명령이 실행되고 디버거가 대상에 침입할 수 없는 경우 디버거는 "중단 시간 초과" 메시지를 표시합니다.

이 시점에서 디버거는 대상에 침입하려는 시도를 중지합니다. 대신 디버거는 대상을 일시 중지하고 대상 애플리케이션을 검사(제어하지 않음)할 수 있습니다.

기본 제한 시간은 30초입니다.