런타임 디버거(Cordbg.exe)

업데이트: 2007년 11월

도구 공급업체와 응용 프로그램 개발자는 런타임 디버거를 사용하여 .NET Framework 공용 언어 런타임을 대상으로 하는 프로그램에서 버그를 찾고 수정할 수 있습니다. 이 도구는 런타임 Debug API를 사용하여 디버깅 서비스를 제공합니다. Cordbg.exe의 소스 코드는 샘플 응용 프로그램으로 제공됩니다. 개발자는 이 코드를 통해 디버깅 서비스의 사용 방법을 배울 수 있습니다. 현재는 Cordbg.exe를 사용하여 관리 코드만 디버깅할 수 있으며, 비관리 코드의 디버깅은 지원되지 않습니다.

Cordbg.exe 세션을 시작하려면 아래 구문의 첫 번째 줄을 사용합니다. Cordbg.exe 세션 내부에서는 (cordbg) 프롬프트의 두 번째 줄을 사용합니다.

cordbg [ProgramName[Program arguments]][optional arguments ]
command [command arguments]

매개 변수

명령

설명

ap[pdomainenum] [option]

현재 프로세스의 모든 응용 프로그램 도메인, 어셈블리 및 모듈을 열거합니다. option 인수를 지정하지 않으면 현재 프로세스의 모든 응용 프로그램 도메인, 어셈블리 및 모듈이 나열됩니다. 분리 또는 연결 후에는 go 명령을 지정하여 실행을 다시 시작해야 합니다.

option 인수로 다음 중 하나를 사용할 수 있습니다.

attach

프로세스의 응용 프로그램 도메인을 나열하여 사용자가 연결할 도메인을 선택할 수 있도록 합니다.

detach

프로세스의 응용 프로그램 도메인을 나열하여 사용자가 분리할 도메인을 선택할 수 있도록 합니다.

0

프로세스의 응용 프로그램 도메인을 나열합니다.

1

프로세스의 응용 프로그램 도메인 및 어셈블리를 나열합니다.

as[sociatesource] {s|b breakpoint id} filename

지정된 파일 이름을 현재 스택 프레임 포인터(옵션 s) 또는 지정된 중단점(옵션 b)과 연결합니다.

a[ttach] pid

실행 중인 프로세스에 디버거를 연결합니다. 현재 디버깅 중인 프로그램이 있으면 Cordbg.exe에서는 이 프로그램을 중단하고 pid 인수로 지정된 프로세스에 연결을 시도합니다. 프로세스 식별 번호인 pid는 10진수 또는 16진수 형식입니다.

b[reak] [[file:] line number] |

[[ class::] function [:offset]]

중단점을 설정하거나 표시합니다. 어떤 인수도 지정하지 않으면 현재 중단점 목록이 표시되고, 인수를 지정하면 지정된 위치에 중단점이 설정됩니다. 현재 소스 파일의 줄 번호, 정규화된 소스 파일의 줄 번호 또는 클래스 및 선택적 오프셋에 의해 한정된 메서드에 중단점을 설정할 수 있습니다.

중단점은 한 세션에서 여러 번 실행되는 동안에도 계속 유지됩니다. break 명령을 사용할 때와 같은 방식으로 stop 명령을 사용할 수 있습니다.

지정된 중단점 위치를 코드에 바인딩할 수 없는 경우 Cordbg.exe에서는 해당 중단점을 "unbound"로 표시합니다. 중단점이 바인딩 해제된 경우에는 해당 중단점 위치에 대한 내부 코드가 아직 로드되지 않았음을 의미합니다. 이러한 문제는 대/소문자가 구분되는 파일 또는 클래스 이름을 잘못 입력하는 경우와 같이 그 원인을 확실히 알 수 있습니다. 또한, 응용 프로그램을 실행하기 전에 중단점을 설정하는 경우에도 중단점이 바인딩 해제됩니다. 왜냐하면 중단점은 실제 코드가 로드될 때 바인딩되기 때문입니다. 디버거에서는 모듈을 로드할 때 바인딩 해제된 중단점을 모두 자동으로 다시 바인딩하려고 시도합니다.

ca[tch] [event]

이벤트 형식 목록을 표시하거나 지정된 이벤트 형식에 의해 디버거가 중단되도록 합니다. 인수를 지정하지 않으면 이벤트 형식 목록이 표시됩니다. 이때 디버거를 중단시키는 이벤트 형식은 "on"으로 표시되고, 무시되는 이벤트 형식은 "off"로 표시됩니다. 인수를 지정하면 지정된 형식의 이벤트가 발생할 때 디버거가 중단됩니다. 기본적으로 디버거는 처리되지 않은 예외 이벤트(두 번째 예외)에 대해서만 중단됩니다. 디버거를 중단시키는 이벤트 형식은 한 세션에서 여러 번 실행되는 동안에도 계속 유지됩니다. 디버거에서 특정 형식의 이벤트를 무시하도록 하려면 ignore 명령을 사용합니다.

event 인수로 다음 중 하나를 사용할 수 있습니다.

e[xceptions] [exception type]

catch할 첫 번째 예외 목록에 예외 형식을 추가합니다. 예외 형식을 지정하지 않으면 첫 번째 예외가 모두 catch됩니다. 예외 형식은 System.ArgumentException과 같이 대/소문자를 구분합니다.

u[nhandled]

처리되지 않은 예외

c[lass]

클래스 로드 이벤트

m[odule]

모듈 로드 이벤트

t[hread]

스레드 시작 이벤트

conn[ect] machine_nameport

스마트 장치 프로젝트에 사용됩니다.

.NET Compact Framework 응용 프로그램을 실행하는 원격 장치에 연결합니다.

매개 변수

정의

machine_name

필수적 요소. 원격 컴퓨터의 이름 또는 IP 주소입니다.

Port

필수적 요소. 원격 컴퓨터에 연결하는 데 사용할 포트입니다.

cont [count]

프로그램을 계속합니다. 인수를 지정하지 않으면 프로그램이 한 번만 계속되고, 인수를 지정하면 지정한 횟수만큼 프로그램이 계속됩니다. 이 명령은 클래스 로드 이벤트, 예외 또는 중단점으로 인해 디버거가 중단되는 경우 프로그램을 계속하는 데 유용합니다. cont 명령을 사용할 때와 같은 방식으로 go 명령을 사용할 수 있습니다.

del[ete] [breakpoint id, ...]

중단점을 삭제합니다. 인수를 지정하지 않으면 현재의 중단점이 모두 삭제되고, breakpoint id 인수를 하나 이상 지정하면 지정된 중단점이 삭제됩니다. 중단점 식별자는 break 또는 stop 명령을 사용하여 얻을 수 있습니다. delete 명령을 사용할 때와 같은 방식으로 remove 명령을 사용할 수 있습니다.

de[tach]

현재 프로세스에서 디버거를 분리합니다. 프로세스는 디버거가 추가된 것처럼 자동으로 계속 실행됩니다.

dis[assemble] [0xaddress][{+|-} delta] [line count]

현재 명령 포인터 또는 address가 지정된 경우 디스어셈블된 해당 네이티브 명령을 표시합니다. 기본적으로 표시되는 명령 개수는 5개입니다. line count 인수를 지정하는 경우에는 현재 명령 포인터 또는 주소 앞뒤에 지정된 개수만큼 추가 명령이 표시됩니다. 마지막으로 사용된 line count는 현재 세션의 기본값이 됩니다. 델타를 지정하면 지정된 개수가 현재 명령 포인터 또는 지정된 주소에 추가되어 디스어셈블링이 시작됩니다.

d[own] [count]

검사 목적으로 현재 프레임에서 호출한 프레임을 향해 스택 프레임 포인터를 스택 아래로 이동합니다. 인수를 지정하지 않으면 스택 프레임 포인터가 한 프레임 아래로 이동하고, 인수를 지정하면 지정된 프레임 수만큼 아래로 이동합니다. 소스 수준 정보를 사용할 수 있는 경우에는 해당 프레임에 대한 소스 줄이 표시됩니다. 이 명령은 자주 up 명령과 함께 사용됩니다.

du[mp] address [count]

디버거 모드(mode 참조)에 따라 16진수 또는 10진수 형식의 출력과 함께 메모리 블록을 덤프합니다. address 인수는 메모리 블록의 주소를 나타내고, count 인수는 덤프할 바이트 수를 나타냅니다.

ex[it]

현재 프로세스를 중단하고 디버거를 종료합니다. exit 명령을 사용할 때와 같은 방식으로 quit 명령을 사용할 수 있습니다.

f[unceval] [class::] function [ arg0 arg1 ...argn]

현재 스레드에서 지정된 함수를 계산합니다. 새 개체는 변수 $result에 저장되어 다음 계산에 사용될 수 있습니다. 사용할 수 있는 인수는 다른 변수, 4바이트 정수 및 상수 Null, TrueFalse로 제한됩니다.

참고

멤버 함수의 경우 첫 번째 인수는 해당 멤버 함수가 속해 있는 클래스 또는 파생 클래스의 개체여야 합니다.

g[o] [count]

cont를 참조하십시오.

h[elp] [command ...]

지정된 명령에 대한 설명을 표시합니다. 인수를 지정하지 않으면 디버거 명령 목록이 표시됩니다. help 명령을 사용할 때와 같은 방식으로 ? 명령을 사용할 수 있습니다.

ig[nore] [event]

이벤트 형식 목록을 표시하거나 디버거에서 지정된 이벤트 형식을 무시하도록 합니다. event 인수를 지정하지 않으면 이벤트 형식 목록이 표시됩니다. 이때 무시되는 이벤트 형식은 "off"로 표시되고, 디버거를 중지시키는 이벤트 형식은 "on"으로 표시됩니다. 인수를 지정하면 지정된 형식의 이벤트가 무시됩니다. 디버거를 중단시킬 이벤트 형식을 설정하려면 catch 명령을 사용합니다.

다음 이벤트 형식 중 하나를 event 인수로 사용할 수 있습니다.

e[xceptions] [exception type]

무시할 첫 번째 예외 목록에 예외 형식을 추가합니다. 예외 형식을 지정하지 않으면 첫 번째 예외가 모두 무시됩니다. 예외 형식은 System.ArgumentException과 같이 대/소문자를 구분합니다.

u[nhandled]

처리되지 않은 예외

c[lass]

클래스 로드 이벤트

m[odule]

모듈 로드 이벤트

t[hread]

스레드 시작 이벤트

i[n] [count]

step을 참조하십시오.

k[ill]

현재 프로세스를 중단합니다. 이때 디버거는 추가 명령을 처리할 수 있도록 활성 상태로 유지됩니다.

l[ist] option

로드된 모듈, 클래스 또는 전역 함수의 목록을 표시합니다.

option 인수로 다음 중 하나를 사용할 수 있습니다.

mod

프로세스에 로드된 모듈을 표시합니다.

cl

프로세스에 로드된 클래스를 표시합니다.

fu

프로세스의 각 모듈에 대한 전역 함수를 표시합니다.

m[ode] [[mode name {0|1} ]

다양한 디버거 기능을 위한 디버거 모드를 설정하고 표시합니다. 값을 설정하려면 mode name을 지정하고 1("on") 또는 0("off")을 지정합니다. 인수를 지정하지 않으면 현재 모드 설정 목록이 표시됩니다. Cordbg.exe를 실행하는 사이에 Windows 레지스트리에서 모드가 유지됩니다. 자세한 내용은 디버거 mode 인수 표를 참조하십시오.

newo[bj] class

현재 스레드를 사용하여 새 개체를 만듭니다. 새 개체는 변수 $result에 저장되어 다음 계산에 사용될 수 있습니다.

newobjnc class

개체에서 생성자를 실행하지 않고 현재 스레드를 사용하여 새 개체를 만듭니다. 새 개체는 0으로 초기화됩니다. 새 개체는 변수 $result에 저장되어 다음 계산에 사용될 수 있습니다.

news[tr] string

현재 스레드를 사용하여 새 문자열을 만듭니다. 새 개체는 변수 $result에 저장되어 다음 계산에 사용될 수 있습니다.

n[ext] [count]

프로그램을 다음 소스 줄로 이동하여 함수 호출을 프로시저 단위로 실행합니다. 인수를 지정하지 않으면 소스 줄 하나만 이동하고, 인수를 지정하면 지정된 줄 수만큼 이동합니다. next 명령을 사용할 때와 같은 방식으로 so 명령을 사용할 수도 있습니다.

ns[ingle] [count]

프로그램을 다음 명령으로 이동하여 함수 호출을 건너뜁니다. 인수를 지정하지 않으면 하나의 명령만 이동하고, count 인수를 지정하면 지정된 명령 수만큼 이동합니다.

o[ut] [count]

현재 함수 외부로 프로그램을 이동합니다. 인수를 지정하지 않으면 현재 함수에 대해 한 번만 외부로 이동하고, 인수를 지정하면 지정된 횟수만큼 외부로 이동합니다.

pa[th] [new path]

소스 파일 및 디버깅 기호 검색에 사용되는 경로를 표시하거나 설정합니다. 인수를 지정하지 않으면 현재 경로가 표시되고, newpath 인수를 지정하면 해당 경로가 소스 파일 및 디버깅 기호 검색에 사용되는 새로운 경로가 됩니다. 이 경로는 Windows 레지스트리의 여러 세션 간에 동일하게 유지됩니다.

p[rint] [variable name]

하나 이상의 지역 변수를 해당 값과 함께 표시합니다. 인수를 지정하지 않으면 모든 지역 변수 및 해당 값이 표시되고, 인수를 지정하면 지정된 지역 변수의 값만 표시됩니다. 자세한 내용은 예제 단원의 print 명령 사용을 참조하십시오.

pro[cessenum]

관리되는 모든 프로세스와 각 프로세스의 응용 프로그램 도메인을 열거합니다.

q[uit]

exit를 참조하십시오.

ref[reshsource] [source file]

지정된 소스 파일의 소스 코드를 다시 로드합니다. 다시 로드할 소스 파일은 현재 실행 중인 프로그램의 일부이어야 합니다. path 명령을 사용하여 소스 파일 경로를 설정한 다음에는 refreshsource 명령을 사용하여 손실된 소스 코드를 가져올 수 있습니다.

regd[efault] [force]

기본 JIT(Just-In-Time) 디버거를 Cordbg.exe로 설정합니다. 다른 디버거가 이미 등록된 경우에는 아무 작업도 수행되지 않습니다. 이미 등록된 JIT 디버거를 덮어쓰려면 force 인수를 사용합니다.

reg[isters]

현재 스레드에 대한 레지스터 내용을 표시합니다.

rem[ove] [breakpoint id, ...]

delete를 참조하십시오.

re[sume] [~] [tid]

디버거가 계속될 때 tid 인수로 지정한 스레드를 다시 시작합니다. ~ 구문을 사용하면 지정한 스레드를 제외한 모든 스레드가 다시 시작됩니다. 이 명령은 인수를 지정해야만 실행됩니다.

r[un] [executable [args]]

현재 프로세스를 중단하고 새 프로세스를 시작합니다. executable 인수를 지정하지 않으면 이전에 run 명령으로 실행된 프로그램이 실행되고, executable 인수를 지정하면 선택적으로 지정된 args를 사용하여 지정된 프로그램이 실행됩니다. Cordbg.exe에서 클래스 로드 이벤트, 모듈 로드 이벤트 및 스레드 시작 이벤트를 무시하는 경우(기본값) 프로그램은 주 스레드의 첫 번째 실행 가능한 명령에서 중단됩니다.

set variable value

지정한 variable의 값을 지정한 value로 설정합니다. 이 값은 리터럴 또는 다른 변수일 수 있습니다. 자세한 내용은 예제 단원의 set 명령 사용을 참조하십시오.

setipline number

실행할 다음 문을 지정된 line number로 설정합니다.

sh[ow] [count]

소스 코드 줄을 표시합니다. 인수를 지정하지 않으면 현재 소스 코드 줄의 앞뒤에 있는 5개의 소스 코드 줄이 표시되고, 인수를 지정하면 현재 줄의 앞뒤에 있는 줄이 지정된 수만큼 표시됩니다. 마지막으로 지정된 count는 현재 세션의 기본값이 됩니다.

si [<count>]

step을 참조하십시오.

so [<count>]

next를 참조하십시오.

ss[ingle] [count]

프로그램을 다음 명령으로 이동하여 함수 호출을 단계별로 실행합니다. 인수를 지정하지 않으면 한 단계의 명령만 수행되고, 인수를 지정하면 지정된 수만큼의 단계가 수행됩니다.

s[tep] [count]

프로그램을 다음 소스 줄로 이동시켜 함수 호출을 단계별로 실행합니다. 인수를 지정하지 않으면 프로그램은 바로 다음 줄로 이동하고, 인수를 지정하면 지정된 줄 수만큼 이동합니다. step 명령을 사용할 때와 같은 방식으로 si 명령 또는 in 명령을 사용할 수 있습니다.

stop [[file:] line number] |

[[class::] function[:offset]] |

[=0xaddress]

break를 참조하십시오.

su[spend] [~] [tid]

디버거가 계속될 때 tid 인수로 지정한 스레드를 일시 중단합니다. ~ 구문을 사용하면 지정한 스레드를 제외한 모든 스레드가 일시 중단됩니다. 이 명령은 인수를 지정해야만 실행됩니다.

t[hreads] [tid]

스레드 목록을 표시하거나 현재 스레드를 설정합니다. 인수를 지정하지 않으면 아직 작동 중이며 관리 코드를 실행한 모든 스레드의 목록이 표시됩니다. 인수를 지정하면 현재 스레드가 지정된 스레드로 설정됩니다.

up [count]

검사 목적으로 현재 프레임을 호출한 프레임을 향해 스택 프레임 포인터를 스택 위로 이동시킵니다. 인수를 지정하지 않으면 스택 프레임 포인터가 한 프레임 위로 이동하고, 인수를 지정하면 지정된 스택 프레임 수만큼 위로 이동합니다. 소스 수준 정보를 사용할 수 있는 경우에는 해당 프레임에 대한 소스 줄이 표시됩니다.

w[here] [count]

현재 스레드에 대한 스택 추적을 표시합니다. 인수를 지정하지 않으면 전체 스택 추적이 표시되고, 인수를 지정하면 지정된 수만큼의 스택 프레임이 표시됩니다.

wr[itememory] address count byte, ...

대상 프로세스에 지정된 바이트 수만큼 씁니다. address 인수는 해당 바이트를 쓸 위치를 지정하고, count 인수는 쓸 바이트 수를 지정합니다. byte 인수는 프로세스에 쓸 내용을 지정합니다. 목록의 바이트 수가 count 인수보다 작으면 해당 바이트 목록이 줄 바꿈되어 다시 복사됩니다. 목록의 바이트 수가 count 인수보다 크면 나머지 바이트는 무시됩니다.

wt

응용 프로그램의 네이티브 명령을 따라 현재 명령에서 시작하여 각 호출 트리를 차례로 인쇄합니다. 각 함수에서 실행된 네이티브 명령의 개수가 호출 추적과 함께 인쇄됩니다. 명령이 원래 실행된 함수의 반환 명령에 도달하면 추적이 중단됩니다. 추적이 완료되면 실행된 전체 명령 개수가 인쇄됩니다. 이 명령은 NT Symbolic Debugger의 wt 명령과 흡사하며, 기본 성능 분석에 사용할 수 있습니다. 현재는 관리 코드만 셀 수 있습니다.

xmodulename !string_to_look_for

지정된 모듈에서 string_to_look_for 인수로 지정된 패턴과 일치하는 기호를 표시합니다. string_to_look_for 인수에 별표(*) 문자를 사용하면 모든 패턴을 지정할 수 있습니다. * 다음에 오는 문자는 모두 무시됩니다.

? [command ...]

help를 참조하십시오.

>filename

지정된 filename에 실행된 명령을 모두 씁니다. filename을 지정하지 않으면 파일에 명령 쓰기가 중단됩니다.

<filename

지정된 filename에서 명령을 읽고 실행합니다.

참고

Cordbg.exe 명령에서는 대/소문자가 구분됩니다. 또한, 일부 명령에는 동의어가 있으므로 여러 개의 명령 중 어느 것을 사용해도 동일한 결과를 얻게 됩니다. 예를 들어, break 또는 stop 명령 중 어느 쪽을 사용해도 중단점을 설정할 수 있습니다.

Mode 인수

모드를 식별하는 데 꼭 필요한 문자만 사용하여 모드 인수를 지정할 수 있습니다. 예를 들어, "mode m 1"은 "mode moduleloads 1"과 같습니다.

인수

설명

AppDomainLoads

응용 프로그램 도메인 및 어셈블리 로드 이벤트를 표시합니다.

ClassLoads

클래스 로드 이벤트를 표시합니다.

DumpMemoryInBytes

메모리 내용을 바이트 또는 DWORDS로 표시합니다.

EmbededCLR

디버거를 스마트 장치에서 실행되는 대상 .NET Compact Framework 응용 프로그램으로 설정합니다. 이 설정을 제어하려면 1(on) 또는 0(off)을 지정합니다.

EnhanceDiag

확장된 진단 정보를 표시합니다.

HexDisplay

숫자를 16진수 또는 10진수 형식으로 표시합니다.

ILNatPrint

MSIL(Microsoft Intermediate Language)이나 네이티브 언어, 또는 이 둘 모두에 오프셋을 표시합니다.

ISAll

모든 인터셉터를 단계별로 실행합니다.

ISClinit

클래스 초기값을 단계별로 실행합니다.

ISExceptF

예외 필터를 단계별로 실행합니다.

ISInt

사용자 인터셉터를 단계별로 실행합니다.

ISPolicy

컨텍스트 정책을 단계별로 실행합니다.

ISSec

보안 인터셉터를 단계별로 실행합니다.

JitOptimizations

JIT 컴파일에서 디버깅하기 쉬운 코드를 생성할지 여부를 지정합니다.

LoggingMessages

관리 코드 로그 메시지를 표시합니다.

ModuleLoads

모듈 로드 이벤트를 표시합니다.

SeparateConsole

디버깅되는 프로세스에 자체 콘솔을 제공할지 여부를 지정합니다.

ShowArgs

스택 추적의 메서드 인수를 표시합니다.

ShowModules

스택 추적의 모듈 이름을 표시합니다.

ShowStaticsOnPrint

개체에 대한 정적 필드를 표시합니다.

ShowSuperClassOnPrint

개체에 대한 기본 클래스의 내용을 표시합니다.

USAll

매핑되지 않은 모든 중단 위치를 단계별로 실행합니다.

USEpi

메서드 에필로그를 단계별로 실행합니다.

USPro

메서드 프롤로그를 단계별로 실행합니다.

USUnmanaged

비관리 코드를 단계별로 실행합니다.

설명

응용 프로그램을 컴파일할 때 컴파일러별 플래그를 사용하여 디버깅되도록 해야 합니다. 이렇게 하면 컴파일러에서 디버깅 기호를 생성하도록 할 수 있습니다. 이러한 플래그에 대한 자세한 내용은 해당 컴파일러의 설명서를 참조하십시오. 최적화된 응용 프로그램을 디버깅할 수 있지만 일부 디버깅 정보가 표시되지 않습니다. 예를 들어, 다수의 지역 변수가 표시되지 않으며 소스 줄이 정확하지 않게 됩니다.

응용 프로그램을 컴파일한 다음에는 다음 예제에서와 같이 명령 프롬프트에 cordbg를 입력하여 디버깅 세션을 시작할 수 있습니다.

D:\Program Files\FrameworkSDK\Bin>cordbg
Microsoft (R) Common Language Runtime Test Debugger Shell. Version 2000.14.2100.0, Copyright (c) Microsoft Corp. 1998-2000
(cordbg)

(cordbg) 프롬프트는 현재 디버거를 실행 중임을 나타냅니다.

디버거를 실행한 다음에는 명령 및 해당 인수를 사용하여 필요한 기능을 호출할 수 있습니다.

명령줄에서 디버깅 세션을 시작하는 경우에는 디버깅하려는 응용 프로그램의 이름, 프로그램 인수 및 선택적 인수도 제공할 수 있습니다. Cordbg.exe의 선택적 인수는 Cordbg.exe에서 사용되는 명령과 동일하지만 앞에 느낌표(!) 문자가 접두사로 와야 합니다. ! 문자 앞에 백슬래시(\) 문자를 접두사로 사용하면 문자열에서 ! 문자를 리터럴로 사용할 수 있습니다. x 명령을 사용할 때에는 반드시 백슬래시 문자를 접두사로 사용해야 합니다.

명령에 대한 숫자 인수가 접두사 0x로 시작하면 Cordbg.exe에서는 해당 인수가 16진수 형식인 것으로 간주하고, 그렇지 않으면 10진수 형식인 것으로 간주합니다.

Cordbg.exe에 있는 대부분의 인수에 별표(*) 접두사를 붙일 수 있지만 이렇게 하면 프로세스의 관리되는 스레드마다 한 번씩 명령을 실행하게 됩니다. 즉, 명령이 각 스레드의 컨텍스트에서 실행됩니다. w[here] 명령에 별표 접두사를 붙이는 것이 가장 유용합니다. 예를 들어, *w를 사용하면 모든 관리되는 스레드의 스택 추적을 인쇄합니다.

런타임의 디버깅 서비스에 대한 자세한 내용은 프로파일링 및 디버깅 설정 사양을 참조하십시오. 도구 개발자는 Windows SDK(소프트웨어 개발 키트)와 함께 제공되는 Tools Developers Guide 폴더의 디버그 개요 및 디버그 참조 사양도 참조해야 합니다.

예제

Cordbg.exe 세션 시작

다음 명령에서는 MyApplication.exe라는 응용 프로그램에 대해 프로그램 인수 a와 2 및 선택적 명령(MyApplication.cs의 중단점을 42번 줄에 설정하는 명령, 응용 프로그램을 계속하는 명령, MyApplication.exe에서 문자열 'SomeString'과 일치하는 기호를 표시하는 명령)을 사용하여 Cordbg.exe 세션을 시작합니다.

cordbg MyApplication.exe a 2 !b MyApplication.cs:42 !g !x MyApplication.exe\!SomeString

Cordbg.exe 세션 내에서 실행 파일 실행

Cordbg.exe 세션에서 (cordbg) 프롬프트에 다음 명령을 입력하면 프로그램 인수 a와 2를 사용하여 실행 파일 MyApplication.exe가 실행됩니다.

run MyApplication.exe a 2

다음 명령에서는 print 명령에 점 표기법을 사용하여 개체 내에 변수를 지정하는 방법을 보여 줍니다.

print obj.var1
print obj1.obj2.var1

한 클래스에서 다른 클래스를 확장시키는 경우, print 명령을 사용하면 지정된 클래스의 필드와 기본 클래스의 필드가 모두 표시됩니다. 예를 들어, m1 클래스가 a, b 및 c 필드를 포함하고, m2 클래스가 m1 클래스를 확장시키며 d, e 및 f 필드를 포함하는 경우, m2의 myInstance 인스턴스는 다음과 같이 인쇄합니다.

myInstance = <addr> <m2>
      a = 1
      b = 2
      c = 3
      m2::d = 4
      m2::e = 5
      m2::f = 6

다음과 같이 변수 이름에 클래스 이름을 접두사로 사용하면 클래스 정적 변수를 지정할 수 있습니다.

print MyClass::StaticVar1
print System::Boolean::True

배열 인덱스는 단순한 식이어야 합니다. 다음의 배열 인덱스는 print 명령과 함께 사용할 수 있습니다.

print arr[1]
print arr[i]
print arr1[arr2[1]]
print md[1][5][myObject.a]

다음 배열 인덱스는 단순한 식이 아니므로 print 명령과 함께 사용할 수 없습니다.

print arr[i + 1]
print arr[i + 2]

set 명령 사용

set 명령을 사용할 때 지정한 변수에 할당되는 값은 리터럴 또는 다른 변수일 수 있습니다. 다음 예제에서는 set 명령의 올바른 사용법을 보여 줍니다.

set int1 0x2a
set float1 3.1415
set char1 'a'
set bool1 true
set obj1 0x12345678
set obj1 obj2
set obj1.m_length[obj1.m_height] obj3.m_length[2]

참고 항목

참조

.NET Framework 도구

SDK 명령 프롬프트