SOS.dll(SOS 디버깅 확장)
업데이트: 2011년 4월
SOS 디버깅 확장(SOS.dll)을 사용하면 내부 CLR(공용 언어 런타임) 환경에 대한 정보를 제공하여 관리되는 프로그램을 WinDbg.exe 디버거와 Visual Studio에서 쉽게 디버깅할 수 있습니다. 이 도구를 사용하려면 프로젝트에 관리되지 않는 디버깅을 활성화해야 합니다. Windows 디버거(WinDbg.exe)와 함께 SOS 디버깅 확장을 사용할 수도 있습니다.
이 도구는 Visual Studio 및 Windows SDK와 함께 자동으로 설치됩니다. 도구를 실행하려면 Visual Studio 명령 프롬프트 또는 Windows SDK 명령 프롬프트(CMD 셸)를 사용하는 것이 좋습니다. 이러한 유틸리티를 사용하면 설치 폴더를 탐색하지 않고도 도구를 쉽게 실행할 수 있습니다. 자세한 내용은 Visual Studio 및 Windows SDK 명령 프롬프트을 참조하십시오.
컴퓨터에 Visual Studio를 설치한 경우 작업 표시줄에서 Start, All Programs, Visual Studio, Visual Studio Tools 및 Visual Studio Command Prompt를 차례로 클릭합니다.
또는
컴퓨터에 Windows SDK를 설치한 경우 작업 표시줄에서 Start, All Programs 및 Windows SDK의 폴더를 차례로 클릭한 다음 Command Prompt(또는 CMD Shell)를 클릭합니다.
명령 프롬프트에 다음과 같이 입력합니다.
![command] [options]
명령
명령 |
설명 |
---|---|
AnalyzeOOM (ao) |
가비지 수집 힙에 대한 할당 요청에 발생한 마지막 OOM에 대한 정보를 표시합니다. (서버 가비지 수집에서 각 가비지 수집 힙에 OOM(있는 경우)을 표시합니다.) |
BPMD [-nofuturemodule] [<모듈 이름> <메서드 이름>] [-md <MethodDesc>] -list -clear <보류 중인 중단점 번호> -clearall |
지정된 모듈의 지정된 메서드에 중단점을 만듭니다. 지정된 모듈 및 메서드가 로드되지 않은 경우 이 명령은 모듈이 로드되고 JIT(Just-In-Time) 컴파일되었다는 알림을 받을 때까지 기다렸다가 중단점을 만듭니다. -list, -clear 및 -clearall 옵션을 사용하여 보류 중단점 목록을 관리할 수 있습니다.
|
CLRStack [-a] [-l] [-p] [-n] |
관리 코드의 스택 추적만 제공합니다.
SOS 디버깅 확장에서는 x64 및 IA-64 기반 플랫폼에 전환 프레임을 표시하지 않습니다. |
COMState |
각 스레드의 COM 아파트 모델과 Context 포인터를 나열합니다(사용할 수 있는 경우). |
DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <array object address> 또는 DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] <array object address> |
배열 개체의 요소를 검사합니다.
|
DumpAssembly <assembly address> |
어셈블리에 대한 정보를 표시합니다. DumpAssembly 명령은 여러 개의 모듈(있는 경우)을 나열합니다. DumpDomain 명령을 사용하여 어셈블리 주소를 가져올 수 있습니다. |
DumpClass <EEClass address> |
형식과 연관된 EEClass 구조체에 대한 정보를 표시합니다. DumpClass 명령은 정적 필드 값만 표시하고 비정적 필드 값은 표시하지 않습니다. EEClass 구조체 주소를 가져오려면 DumpMT, DumpObj, Name2EE 또는 Token2EE 명령을 사용합니다. |
DumpDomain [<domain address>] |
지정된 Assembly 개체 주소 내에 로드된 각 AppDomain 개체를 열거합니다. 매개 변수 없이 호출된 경우 DumpDomain 명령은 프로세스의 모든 AppDomain 개체를 나열합니다. |
DumpHeap [-stat] [-strings] [-short] [-min <size>] [-max <size>] [-thinlock] [-startAtLowerBound] [-mt <MethodTable address>] [-type <partial type name>][start [end]] |
가비지 수집된 힙에 대한 정보와 개체에 대한 컬렉션 통계를 표시합니다. DumpHeap 명령은 가비지 수집기 힙에서 과도한 단편화가 감지될 경우 경고를 표시합니다.
|
DumpIL <Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer> |
관리되는 메서드와 연관된 MSIL(Microsoft intermediate language)을 표시합니다. 동적 MSIL은 어셈블리에서 로드된 MSIL과는 다르게 내보내집니다. 동적 MSIL은 메타데이터 토큰 대신 관리되는 개체 배열의 개체를 참조합니다. |
DumpLog [-addr <addressOfStressLog>] [<Filename>] |
메모리 내 스트레스 로그의 내용을 지정된 파일에 씁니다. 이름을 지정하지 않으면 이 명령은 현재 디렉터리에 StressLog.txt라는 파일을 만듭니다. 메모리 내 스트레스 로그는 잠금 또는 I/O를 사용하지 않고 진단 스트레스 오류에 도움을 줍니다. 스트레스 로그를 사용하려면 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework에서 다음 레지스트리 키를 설정합니다. (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 선택적 -addr 옵션을 사용하면 기본 로그 외에 다른 스트레스 로그를 지정할 수 있습니다. |
DumpMD <MethodDesc address> |
지정된 주소의 MethodDesc 구조체에 대한 정보를 표시합니다. IP2MD 명령을 사용하여 관리되는 함수에서 MethodDesc 구조체 주소를 가져올 수 있습니다. |
DumpMT [-MD] <MethodTable address> |
지정된 주소의 메서드 테이블에 대한 정보를 표시합니다. -MD 옵션을 지정하면 개체와 함께 정의된 모든 메서드의 목록이 표시됩니다. 관리되는 각 개체에는 메서드 테이블 포인터가 들어 있습니다. |
DumpMethodSig <sigaddr> <moduleaddr> |
지정된 주소의 MethodSig 구조체에 대한 정보를 표시합니다. |
DumpModule [-mt] <Module address> |
지정된 주소의 모듈에 대한 정보를 표시합니다. -mt 옵션은 모듈에 정의된 형식과 모듈에서 참조하는 형식을 표시합니다. DumpDomain 또는 DumpAssembly 명령을 사용하여 모듈의 주소를 검색할 수 있습니다. |
DumpObj [-nofields] <object address> 또는 DO <object address> |
지정된 주소의 개체에 대한 정보를 표시합니다. DumpObj 명령은 필드, EEClass 구조체 정보, 메서드 테이블 및 개체 크기를 표시합니다. DumpStackObjects 명령을 사용하여 개체의 주소를 검색할 수 있습니다. CLASS 형식의 필드도 개체이므로 이러한 필드에 대해 DumpObj 명령을 실행할 수 있습니다. -nofields 옵션은 개체의 필드가 표시되는 것을 방지하고 문자열 같은 개체에 유용합니다. |
DumpRuntimeTypes |
가비지 수집기 힙에 있는 런타임 형식 개체를 표시하고 해당 개체에 연관된 형식 이름과 메서드 테이블을 나열합니다. |
DumpStack [-EE] [-n] [top stack [bottom stack]] |
스택 추적을 표시합니다.
x86 및 x64 플랫폼에서 DumpStack 명령은 자세한 스택 추적을 만듭니다. IA-64 기반 플랫폼에서 DumpStack 명령은 디버거의 K 명령과 비슷하게 동작합니다. top 및 bottom매개 변수는 IA-64 기반 플랫폼에서 무시됩니다. |
DumpSig <sigaddr> <moduleaddr> |
지정된 주소의 Sig 구조체에 대한 정보를 표시합니다. |
DumpSigElem <sigaddr> <moduleaddr> |
서명 개체의 단일 요소를 표시합니다. 대부분의 경우 개별 서명 개체를 찾는 데 DumpSig를 사용해야 합니다. 그러나 어떤 식으로든 서명이 손상된 경우 DumpSigElem을 사용하여 유효한 부분을 읽을 수 있습니다. |
DumpStackObjects [-verify] [top 스택 [bottom 스택]] 또는 DSO [-verify] [top stack [bottom stack]] |
현재 스택의 범위 내에 있는 관리되는 모든 개체를 표시합니다. -verify 옵션은 개체 필드의 각 비정적 CLASS 필드에 대해 유효성을 검사합니다. 지역 변수 및 매개 변수의 값을 확인하려면 K 명령 및 CLRStack 명령과 같은 스택 추적 명령과 함께 DumpStackObject 명령을 사용합니다. |
DumpVC <MethodTable address> <Address> |
지정된 주소에 있는 값 클래스의 필드에 대한 정보를 표시합니다. MethodTable 매개 변수를 사용하면 DumpVC 명령은 필드를 올바르게 해석할 수 있습니다. 값 클래스에는 첫 번째 필드로 메서드 테이블이 포함되지 않습니다. |
EEHeap [-gc] [-loader] |
내부 공용 언어 런타임 데이터 구조에서 사용되는 프로세스 메모리에 대한 정보를 표시합니다. -gc 및 -loader 옵션은 이 명령의 출력을 가비지 수집기나 로더 데이터 구조로 제한합니다. 가비지 수집기에 대한 정보에는 관리되는 힙의 각 세그먼트 범위가 나열됩니다. -gc로 지정된 세그먼트 범위 내에 포인터가 있으면 해당 포인터는 개체 포인터입니다. |
EEStack [-short] [-EE] |
프로세스의 모든 스레드에 대해 DumpStack 명령을 실행합니다. -EE 옵션은 DumpStack 명령에 직접 전달됩니다. -short 매개 변수는 출력을 다음과 같은 종류의 스레드로 제한합니다.
|
EEVersion |
공용 언어 런타임 버전을 표시합니다. |
EHInfo [<MethodDesc address>] [<Code address>] |
지정된 메서드의 예외 처리 블록을 표시합니다. 이 명령은 절 블록(try 블록) 및 처리기 블록(catch 블록)의 코드 주소와 오프셋을 표시합니다. |
FAQ |
FAQ(질문과 대답)를 표시합니다. |
FinalizeQueue [-detail] | [-allReady] [-short] |
종료하도록 등록된 모든 개체를 표시합니다.
|
FindAppDomain <Object address> |
지정된 주소에 있는 개체의 응용 프로그램 도메인을 확인합니다. |
FindRoots -gen <N> | -gen any |<개체 주소> |
디버거가 지정된 생성의 다음 수집에서 디버기를 중단하도록 합니다. 효과는 중단이 발생하는 즉시 다시 설정됩니다. 다음 컬렉션에서 중단하려면 명령을 다시 실행해야 합니다. 이 명령의 <object address> 폼은 -gen 또는 -gen any에 의해 초래된 중단이 발생한 후에 사용됩니다. 그 당시 디버기가 현재 문제가 되는 생성에서 개체에 대한 루트를 식별하기 위한 FindRoots의 올바른 상태에 있습니다. |
GCHandles [-perdomain] |
프로세스의 가비지 수집기 핸들에 대한 통계를 표시합니다. -perdomain 옵션은 통계가 응용 프로그램 도메인별로 정렬합니다. 가비지 수집기 핸들 누수로 인한 메모리 누수를 확인하려면 GCHandles 명령을 사용합니다. 예를 들어, 강력한 가비지 수집기 핸들이 코드에서 큰 배열을 가리키고 있어서 아직 배열이 해제되지 않은 상태로 핸들을 삭제하면 메모리 누수가 발생합니다. |
GCHandleLeaks |
메모리에서 프로세스의 강력하고 고정된 가비지 수집기 핸들에 대한 참조를 검색하여 결과를 표시합니다. 핸들이 있으면 GCHandleLeaks 명령은 참조의 주소를 표시합니다. 메모리에 핸들이 없으면 이 명령은 알림을 표시합니다. |
GCInfo <MethodDesc address><Code address> |
레지스터 또는 스택 위치에 관리되는 개체가 포함되는 시기를 나타내는 데이터를 표시합니다. 가비지 수집이 수행될 때 수집기에서는 개체에 대한 참조의 위치를 알고 있어야 새 개체 포인터 값으로 업데이트할 수 있습니다. |
GCRoot [-nostacks] <Object address> |
지정된 주소의 개체에 대한 참조(또는 루트)와 관련된 정보를 표시합니다. GCRoot 명령은 다른 개체 내의 핸들과 스택의 핸들에 대한 핸들 테이블 및 관리되는 전체 힙을 검사합니다. 그런 다음 각 스택에서 개체에 대한 포인터를 검색하고 종료자 큐도 검색합니다. 이 명령은 스택 루트가 유효하거나 삭제되었는지는 확인하지 않습니다. 스택 루트가 여전히 사용 중인지 여부를 확인하기 위해 로컬 또는 인수 값이 속해 있는 프레임을 디스어셈블하려면 CLRStack 및 U 명령을 사용합니다. -nostacks 옵션은 검색을 가비지 수집기 핸들 및 종료-도달(freachable) 개체로 제한합니다. |
GCWhere <object address> |
가비지 수집 힙에서 전달된 인수의 위치와 크기를 표시합니다. 인수가 관리되는 힙에 있지만 유효한 개체 주소가 아니면 크기는 0(영)으로 표시됩니다. |
help [<command>] [faq] |
매개 변수가 지정되지 않은 경우 사용할 수 있는 모든 명령을 표시하거나, 지정된 명령에 대한 자세한 도움말 정보를 표시합니다. faq 매개 변수는 질문과 대답을 표시합니다. |
HeapStat [-inclUnrooted | -iu] |
각 힙의 생성 크기와 각 힙의 각 세대에 있는 총 여유 공간을 표시합니다. -inclUnrooted 옵션이 지정된 경우 더 이상 루트가 아닌 가비지 수집 힙의 관리되는 개체에 대한 정보가 보고서에 포함됩니다. |
HistClear |
Hist 명령의 패밀리에서 사용하는 모든 리소스를 해제합니다. 일반적으로 각 HistInit이 이전 리소스를 정리하기 때문에 HistClear를 명시적으로 호출할 필요가 없습니다. |
HistInit |
디버기에 저장된 스트레스 로그에서 SOS 구조를 초기화합니다. |
HistObj <obj_address> |
모든 스트레스 로그 재배치 레코드를 검사하여 인수로 전달된 주소로 연결될 수 있는 가비지 수집 재배치의 체인을 표시합니다. |
HisttObjFind <obj_address> |
지정된 주소의 개체를 참조하는 모든 로그 항목을 표시합니다. |
HistRoot <root> |
지정된 루트의 승격 및 재배치와 관련된 정보를 표시합니다. 루트 값은 가비지 수집을 통해 개체의 움직임을 추적하는 데 사용할 수 있습니다. |
IP2MD <Code address> |
JIT 컴파일된 코드의 지정된 주소에 있는 MethodDesc 구조체를 표시합니다. |
ListNearObj (lno) <obj_address> |
지정된 주소의 앞 및 다음 개체를 표시합니다. 명령은 관리되는 개체(유효한 메서드 테이블을 기준으로 함)와 인수 주소 다음에 있는 개체의 유효한 시작처럼 보이는 가비지 수집 힙에서 주소를 찾습니다. |
MinidumpMode [0] [1] |
미니덤프를 사용할 때 안전하지 않은 명령이 실행되지 않도록 합니다. 이 기능을 해제하려면 0을 전달하고, 설정하려면 1을 전달합니다. 기본적으로 MinidumpMode 값은 0으로 설정되어 있습니다. .dump /m 명령이나 .dump 명령으로 만들어진 미니덤프에는 제한된 CLR 관련 데이터가 있으며 이 미니덤프를 사용하면 SOS 명령의 하위 집합만 올바르게 실행할 수 있습니다. 일부 명령은 필요한 메모리 영역이 매핑되지 않거나 부분적으로만 매핑되었기 때문에 예기치 않은 오류와 함께 실패할 수 있습니다. 이 옵션은 미니덤프에 대해 안전하지 않은 명령이 실행되지 않도록 합니다. |
Name2EE <module name> <type or method name> 또는 Name2EE <module name>!<type or method name> |
지정된 모듈에 있는 지정된 형식 또는 메서드의 MethodTable 구조체와 EEClass 구조체를 표시합니다. 지정된 모듈은 프로세스에 로드되어 있어야 합니다. 올바른 형식 이름을 가져오려면 Ildasm.exe(MSIL 디스어셈블러)를 사용하여 모듈을 찾습니다. *를 module name 매개 변수로 전달하여 로드된 모든 관리되는 모듈을 검색할 수도 있습니다. module name 매개 변수는 mscorlib 또는 image00400000과 같이 모듈의 디버거 이름일 수도 있습니다. 이 명령은 Windows 디버거 구문인 <module>!<type>을 지원합니다. 해당 형식은 정규화된 형식이어야 합니다. |
ObjSize [<Object address>] | [-aggregate] [-stat] |
지정된 개체의 크기를 표시합니다. 매개 변수를 지정하지 않을 경우 ObjSize 명령은 관리되는 스레드에 있는 모든 개체의 크기를 표시하고, 프로세스의 모든 가비지 수집기 핸들을 표시하고, 이러한 핸들이 가리키는 모든 개체의 총 크기를 나타냅니다. ObjSize 명령은 부모 개체뿐 아니라 모든 자식 개체의 크기도 포함합니다. -aggregate 옵션은 -stat 인수와 함께 사용하여 여전히 루트인 형식의 세부 보기를 얻을 수 있습니다. !dumpheap -stat 및 !objsize -aggregate -stat를 사용하여 개체가 더 이상 루트에 있지 않고 다양한 메모리 문제를 진단하지 못하는지 확인할 수 있습니다. |
PrintException [-nested] [-lines] [<Exception object address>] 또는 PE [-nested] [<Exception object address>] |
지정된 주소의 Exception 클래스에서 파생된 개체 필드를 표시하고 필드의 형식을 지정합니다. 주소를 지정하지 않으면 PrintException 명령은 현재 스레드에서 마지막으로 throw된 예외를 표시합니다.
이 명령을 사용하여 이진 배열인 _stackTrace 필드의 형식을 지정하고 해당 필드를 볼 수 있습니다. |
ProcInfo [-env] [-time] [-mem] |
프로세스의 환경 변수, 커널 CPU 시간 및 메모리 사용 통계를 표시합니다. |
RCWCleanupList <RCWCleanupList address> |
지정된 주소에서 정리를 기다리는 런타임 호출 가능 래퍼의 목록을 표시합니다. |
SaveModule <Base address> <Filename> |
지정된 주소의 메모리에 로드된 이미지를 지정된 파일에 씁니다. |
SOSFlush |
내부 SOS 캐시를 플러시합니다. |
StopOnException [-derived] [-create | -create2] <Exception> <Pseudo-register number> |
지정된 예외가 throw되면 디버거가 중지되고 다른 예외가 throw되면 계속 실행되도록 합니다. -derived 옵션은 지정된 예외와 지정된 예외에서 파생되는 모든 예외를 catch합니다. |
SyncBlk [-all | <syncblk number>] |
지정된 SyncBlock 구조체나 모든 SyncBlock 구조체를 표시합니다. 인수를 전달하지 않으면 SyncBlk 명령은 스레드에서 소유하는 개체에 해당하는 SyncBlock 구조체를 표시합니다. SyncBlock 구조체는 모든 개체에 대해 만들 필요는 없는 추가 정보를 포함하기 위한 컨테이너입니다. 이 구조체는 COM interop 데이터, 해시 코드 및 스레드로부터 안전한 작업에 대한 잠금 정보를 포함할 수 있습니다. |
ThreadPool |
큐에 대기 중인 작업 요청 수, 완료 포트 스레드 수 및 타이머 수를 비롯하여 관리되는 스레드 풀에 대한 정보를 표시합니다. |
Token2EE <module name> <token> |
지정된 모듈의 지정된 메타데이터 토큰을 MethodTable 구조체나 MethodDesc 구조체로 전환합니다. module name 매개 변수에 *를 전달하면 로드된 모든 관리되는 모듈에서 해당 토큰이 매핑되는 대상을 확인할 수 있습니다. mscorlib 또는 image00400000과 같이 모듈의 디버거 이름을 전달할 수도 있습니다. |
Threads [-live] [-special] |
프로세스의 관리되는 모든 스레드를 표시합니다. Threads 명령은 디버거 약식 ID, 공용 언어 런타임 스레드 ID 및 운영 체제 스레드 ID를 표시합니다. 또한 Threads 명령은 스레드가 실행되는 응용 프로그램 도메인을 나타내는 도메인 열, COM 아파트 모드를 표시하는 APT 열 및 스레드에서 throw된 마지막 예외를 표시하는 예외 열을 표시합니다.
|
ThreadState <상태 값 필드> |
스레드의 현재 상태를 표시합니다. value 매개 변수는 Threads 보고서 출력에 있는 State 필드의 값입니다. 예를 들면 와 같은 형식입니다.
|
TraverseHeap [-xml] <filename> |
힙 정보를 CLR 프로파일러에서 인식할 수 있는 형식으로 지정된 파일에 씁니다. -xml 옵션을 사용하면 TraverseHeap 명령은 파일을 XML 형식으로 지정합니다. Microsoft 다운로드 센터에서 CLR 프로파일러를 다운로드할 수 있습니다. |
U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> | <Code address> |
메서드의 MethodDesc 구조체 포인터나 메서드 본문 내의 코드 주소로 지정된 관리되는 메서드에 대해 주석이 지정된 디스어셈블리를 표시합니다. U 명령은 메서드를 처음부터 끝까지 모두 표시하고 메타데이터 토큰을 이름으로 변환하는 주석을 함께 표시합니다.
|
VerifyHeap |
가비지 수집기 힙에서 손상된 곳이 있는지 확인하고 찾은 오류를 표시합니다. P/Invoke 호출이 잘못 구성되면 힙이 손상될 수 있습니다. |
VerifyObj <object address> |
기호 손상에 대한 인수로 전달되는 개체를 검사합니다. |
VMMap |
가상 주소 공간으로 이동하여 각 영역에 적용된 보호 형식을 표시합니다. |
VMStat |
가상 주소 공간의 요약 뷰를 제공합니다. 이 뷰에서는 해당 메모리에 적용된 각 보호 형식(사용 가능, 예약됨, 커밋됨, 전용, 매핑됨, 이미지)별로 정렬됩니다. TOTAL 열에는 AVERAGE 열에 BLK COUNT 열을 곱한 결과가 표시됩니다. |
설명
SOS 디버깅 확장을 사용하려면 WDK and Developer Tools(WDK 및 개발자 도구) 웹 사이트에서 다운로드할 수 있는 WinDbg.exe 디버거나 Visual Studio에 SOS 디버깅 확장을 로드해야 합니다. WinDgb.exe 또는 Visual Studio의 직접 실행 창 내에서 명령을 실행할 수 있습니다.
SOS 디버깅 확장을 사용하면 공용 언어 런타임 내에서 실행되는 코드에 대한 정보를 볼 수 있습니다. 예를 들어, SOS 디버깅 확장을 사용하여 관리되는 힙에 대한 정보를 표시하고, 힙 손상을 찾고, 런타임에 사용되는 내부 데이터 형식을 표시하고, 런타임 내에서 실행되는 관리되는 모든 코드에 대한 정보를 볼 수 있습니다.
SOS 디버깅 확장 로딩
SOS 디버깅 확장을 WinDbg.exe 디버거에 로드하려면 도구에서 다음 명령을 실행합니다.
.loadby sos clr
SOS 디버깅 확장을 Visual Studio에 로드하려면 디버깅하는 동안 직접 실행 창에서 다음 명령을 실행합니다.
.load SOS.dll
명령이 성공하면 직접 실행 창에 다음 메시지가 반환됩니다.
extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded
SOS 디버깅 확장을 로드하려면 먼저 솔루션의 프로젝트 설정에서 관리되지 않는 디버깅을 사용하도록 설정해야 합니다. 일부 언어의 경우 관리되지 않는 디버깅은 기본적으로 사용하지 않도록 설정되어 있습니다. 일부 플랫폼에서는 관리 코드와 비관리 코드를 동시에 디버깅할 수 없습니다.
참고 |
---|
Visual Studio에서 직접 실행 창을 표시하려면 디버그 메뉴에서 Windows를 가리킨 다음 직접 실행 옵션을 클릭합니다.Visual Studio에서 Ctrl+Alt+I를 눌러 직접 실행 창을 열 수도 있습니다. |
WinDbg.exe 및 Visual Studio에서는 현재 사용 중인 Mscorwks.dll 버전에 해당하는 버전의 SOS.dll을 사용합니다. .NET Framework의 버전 1.1 및 2.0의 경우 SOS.dll은 Mscorwks.dll과 동일한 디렉터리에 설치됩니다. 기본적으로 현재 Mscorwks.dll 버전과 일치하는 버전의 SOS.dll을 사용해야 합니다.
다른 컴퓨터에서 만든 덤프 파일을 사용하려면 해당 프로그램과 함께 설치된 Mscorwks.dll 파일이 기호 경로에 있는지 확인하고 해당하는 버전의 SOS.dll을 로드해야 합니다.
특정 버전의 SOS.dll을 로드하려면 Windows 디버거에 다음 명령을 입력합니다.
.load <full path to sos.dll>
예제
다음 명령은 00ad28d0 주소에 있는 배열의 내용을 표시합니다. 두 번째 요소부터 시작하여 다섯 개의 요소까지 계속해서 표시합니다.
!dumparray -start 2 -length 5 -detail 00ad28d0
다음 명령은 1ca248 주소에 있는 어셈블리의 내용을 표시합니다.
!dumpassembly 1ca248
다음 명령은 가비지 수집기 힙에 대한 정보를 표시합니다.
!dumpheap
다음 명령은 현재 디렉터리에 있는 StressLog.txt라는 (기본) 파일에 메모리 내 스트레스 로그의 내용을 씁니다.
!DumpLog
다음 명령은 902f40 주소의 MethodDesc 구조체를 표시합니다.
!dumpmd 902f40
다음 명령은 1caa50 주소의 모듈에 대한 정보를 표시합니다.
!dumpmodule 1caa50
다음 명령은 a79d40 주소의 개체에 대한 정보를 표시합니다.
!DumpObj a79d40
다음 명령은 0090320c 주소에서 메서드 테이블을 사용하여 00a79d9c 주소의 값 클래스 필드를 표시합니다.
!DumpVC 0090320c 00a79d9c
다음 명령은 가비지 수집기에서 사용되는 프로세스 메모리를 표시합니다.
!eeheap -gc
다음 명령은 종료하도록 예약된 모든 개체를 표시합니다.
!finalizequeue
다음 명령은 00a79d98 주소에 있는 개체의 응용 프로그램 도메인을 확인합니다.
!findappdomain 00a79d98
다음 명령은 현재 프로세스의 모든 가비지 수집기 핸들을 표시합니다.
!gcinfo 5b68dbb8
다음 명령은 unittest.exe 모듈에 있는 MainClass 클래스의 Main 메서드에 대한 MethodTable 및 EEClass 구조체를 표시합니다.
!name2ee unittest.exe MainClass.Main
다음 명령은 unittest.exe 모듈에 있는 02000003 주소의 메타데이터 토큰에 대한 정보를 표시합니다.
!token2ee unittest.exe 02000003
참고 항목
참조
Visual Studio 및 Windows SDK 명령 프롬프트
기타 리소스
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2011년 4월 |
Visual Studio 및 Windows SDK 명령 프롬프트 사용에 대한 정보를 추가했습니다. |
향상된 기능 관련 정보 |