x(기호 검사)
x 명령은 지정된 패턴과 일치하는 모든 컨텍스트에서 기호를 표시합니다.
x [Options] Module!Symbol
x [Options] *
매개 변수
옵션 기호 검색 옵션을 지정합니다. 다음 옵션 중 하나 이상을 사용할 수 있습니다.
/0
각 기호의 주소만 표시합니다.
/1
각 기호의 이름만 표시합니다.
/2
데이터 형식이 아닌 각 기호의 주소와 이름만 표시합니다.
/D
디버거 태그 언어를 사용하여 출력을 표시합니다.
/t
데이터 형식이 알려진 경우 각 기호의 데이터 형식을 표시합니다.
/v
각 기호의 기호 형식(로컬, 전역, 매개 변수, 함수 또는 알 수 없음)을 표시합니다. 이 옵션은 각 기호의 크기도 표시합니다. 함수 기호의 크기는 메모리에 있는 함수의 크기입니다. 다른 기호의 크기는 기호가 나타내는 데이터 형식의 크기입니다. 크기는 항상 바이트 단위로 측정되고 16진수 형식으로 표시됩니다.
/s 크기
크기(바이트)가 Size 값과 같은 기호만 표시합니다. 함수 기호의 크기는 메모리에 있는 함수의 크기입니다. 다른 기호의 크기는 기호가 나타내는 데이터 형식의 크기입니다. 크기를 확인할 수 없는 기호는 항상 표시됩니다. 크기 는 0이 아닌 정수여야 합니다.
/q
기호 이름을 따옴표 붙은 형식으로 표시합니다.
/p
디버거가 함수 이름과 인수를 표시할 때 여는 괄호 앞의 공간을 생략합니다. 이러한 종류의 디스플레이를 사용하면 x 디스플레이에서 다른 위치로 함수 이름과 인수를 복사하는 것이 더 쉬워질 수 있습니다.
/f
함수의 데이터 크기를 표시합니다.
/d
데이터의 데이터 크기를 표시합니다.
/a
표시를 주소별로 오름차순으로 정렬합니다.
/A
내림차순으로 표시를 주소별로 정렬합니다.
/n
표시를 이름으로 오름차순으로 정렬합니다.
/N
표시를 이름으로 내림차순으로 정렬합니다.
/z
디스플레이의 크기를 오름차순으로 정렬합니다.
/Z
디스플레이 크기를 기준으로 내림차순으로 정렬합니다.
모듈
검색할 모듈을 지정합니다. 이 모듈은 .exe, .dll 또는 .sys 파일일 수 있습니다. 모듈 에는 다양한 와일드카드 문자와 지정자가 포함될 수 있습니다. 구문에 대한 자세한 내용은 문자열 와일드카드 구문을 참조 하세요.
상징
기호에 포함해야 하는 패턴을 지정합니다. 기호 에는 다양한 와일드카드 문자와 지정자가 포함될 수 있습니다. 구문에 대한 자세한 내용은 문자열 와일드카드 구문을 참조 하세요.
이 패턴은 기호와 일치하므로 일치는 대/소문자를 구분하지 않으며 단일 선행 밑줄(_)은 선행 밑줄의 수량을 나타냅니다. 와일드카드 문자를 사용하지 않고 공백을 포함하는 기호 이름(예: "operator new" 또는 "Template<A, B>")을 지정할 수 있도록 기호 내에 공백을 추가할 수 있습니다.
환경
항목 | 설명 |
---|---|
모드 | 사용자 모드, 커널 모드 |
대상 | 라이브, 크래시 덤프 |
플랫폼 | 모두 |
설명
다음 명령은 "spin" 문자열을 포함하는 MyModule의 모든 기호를 찾습니다.
0:000> x mymodule!*spin*
다음 명령은 MyModule에서 "DownloadMinor" 및 "DownloadMajor" 기호를 빠르게 찾습니다.
0:000> x mymodule!downloadm??or
다음 명령을 사용하여 MyModule에 모든 기호를 표시할 수도 있습니다.
0:000> x mymodule!*
또한 위의 명령은 디버거가 MyModule에서 기호 정보를 다시 로드하도록 강제합니다. 최소 표시로 모듈의 기호를 다시 로드하려면 다음 명령을 사용합니다.
0:000> x mymodule!*start*
몇 가지 기호에는 항상 "start" 문자열이 포함됩니다. 따라서 이전 명령은 명령이 작동하는지 확인하기 위해 항상 일부 출력을 표시합니다. 그러나 이전 명령은 x mymodule!*의 과도한 표시 길이를 방지합니다.
표시에는 각 기호의 시작 주소와 전체 기호 이름이 표시됩니다. 기호가 함수 이름인 경우 표시에는 인수 형식 목록도 포함됩니다. 기호가 전역 변수이면 현재 값이 표시됩니다.
x 명령의 다른 특수한 경우는 하나 있습니다. 현재 컨텍스트에 대한 모든 지역 변수의 주소와 이름을 표시하려면 다음 명령을 사용합니다.
0:000> x *
참고 대부분의 경우 프라이빗 기호를 로드하지 않으면 지역 변수에 액세스할 수 없습니다. 이 상황에 대한 자세한 내용은 dbgerr005: Private Symbols Required를 참조 하세요. 지역 변수의 값을 표시하려면 dv(지역 변수 표시) 명령을 사용합니다.
다음 예제에서는 /0, /1 및 /2 옵션을 보여 줍니다.
0:000:x86> x /0 MyApp!Add*
00b51410
00b513d0
0:000:x86> x /1 MyApp!Add*
MyApp!AddThreeIntegers
MyApp!AddTwoIntegers
0:000:x86> x /2 MyApp!Add*
00b51410 MyApp!AddThreeIntegers
00b513d0 MyApp!AddTwoIntegers
/0, /1 및 /2 옵션은 x 명령의 출력을 .foreach 명령에 대한 입력으로 사용하려는 경우에 유용합니다.
.foreach ( place { x /0 MyApp!*MySym*} ) { .echo ${place}+0x18 }
다음 예제에서는 모듈 notepad.exe 함수를 필터링하는 데 사용되는 스위치 /f 를 보여 줍니다.
0:000> x /f /v notepad!*main*
prv func 00000001`00003340 249 notepad!WinMain (struct HINSTANCE__ *, struct HINSTANCE__ *, char *, int)
prv func 00000001`0000a7b0 1c notepad!WinMainCRTStartup$filt$0 (void)
prv func 00000001`0000a540 268 notepad!WinMainCRTStartup (void)
/v 옵션을 사용하면 표시의 첫 번째 열에 기호 형식(로컬, 전역, 매개 변수, 함수 또는 알 수 없음)이 표시됩니다. 두 번째 열은 기호의 주소입니다. 세 번째 열은 기호의 크기(바이트)입니다. 네 번째 열에는 모듈 이름과 기호 이름이 표시됩니다. 경우에 따라 이 표시 뒤에 등호(=)와 기호의 데이터 형식이 옵니다. 기호의 원본(공용 또는 전체 기호 정보)도 표시됩니다.
kd> x /v nt!CmType*
global 806c9e68 0 nt!CmTypeName = struct _UNICODE_STRING []
global 806c9e68 150 nt!CmTypeName = struct _UNICODE_STRING [42]
global 806c9e68 0 nt!CmTypeName = struct _UNICODE_STRING []
global 805bd7b0 0 nt!CmTypeString = unsigned short *[]
global 805bd7b0 a8 nt!CmTypeString = unsigned short *[42]
앞의 예제에서 크기는 16진수 형식으로 지정되고 데이터 형식은 10진수 형식으로 지정됩니다. 따라서 앞의 예제의 마지막 줄에서 데이터 형식은 부호 없는 짧은 정수에 대한 42개의 포인터 배열입니다. 이 배열의 크기는 42*4 = 168이고 168은 0xA8 16진수 형식으로 표시됩니다.
/s크기 옵션을 사용하여 크기(바이트)가 특정 값인 기호만 표시할 수 있습니다. 예를 들어 이전 예제의 명령을 크기가 0xA8 개체를 나타내는 기호로 제한할 수 있습니다.
kd> x /v /s a8 nt!CmType*
global 805bd7b0 a8 nt!CmTypeString = unsigned short *[42]
데이터 형식 작업
/t 옵션을 사용하면 디버거가 각 기호의 데이터 형식에 대한 정보를 표시합니다. 많은 기호의 경우 이 정보는 /t 옵션 없이도 표시됩니다. /t를 사용하는 경우 이러한 기호에는 해당 데이터 형식 정보가 두 번 표시됩니다.
0:001> x prymes!__n*
00427d84 myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 myModule!MyStructInstance = struct MyStruct
00427d14 myModule!_NLG_Destination = <no type information>
0:001> x /t prymes!__n*
00427d84 char * myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 int myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 struct MyStruct myModule!MyStructInstance = struct MyStruct
00427d14 <NoType> myModule!_NLG_Destination = <no type information>
x 명령은 형식의 인스턴스를 표시합니다.
0:001> x foo!MyClassInstance
00f4f354 foo!MyClassInstance = 0x00f78768
x 명령은 형식의 이름에 따라 아무것도 표시하지 않습니다.
0:001> x foo!MyClass
0:001>
형식의 이름을 사용하여 형식 정보를 표시하려면 dt(표시 형식)를 사용하는 것이 좋습니다. 형식과 형식 인스턴스 모두에 대한 정보를 제공합니다.
0:001> dt foo!MyClass
+0x000 IntMemberVariable : Int4B
+0x004 FloatMemberVariable : Float
+0x008 BoolMemberVariable : Bool
+0x00c PtrMemberVariable : Ptr32 MyClass
템플릿 작업
이 샘플과 같이 x 명령과 함께 와일드카드를 사용하여 템플릿 클래스를 표시할 수 있습니다.
0:001> x Fabric!Common::ConfigEntry*TimeSpan?
000007f6`466a2f9c Fabric!Common::ConfigEntry<Common::TimeSpan>::ConfigEntry<Common::TimeSpan> (void)
000007f6`466a3020 Fabric!Common::ConfigEntry<Common::TimeSpan>::~ConfigEntry<Common::TimeSpan> (void)
x 명령에 개별 템플릿 클래스 항목이 표시되지 않으므로 템플릿을 사용할 때 dt(표시 형식) 명령을 사용하는 것이 좋습니다.
0:001> dt foo!Common::ConfigEntry<Common::TimeSpan>
+0x000 __VFN_table : Ptr64
+0x008 componentConfig_ : Ptr64 Common::ComponentConfig
+0x010 section_ : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >
+0x038 key_ : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >