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>")을 지정할 수 있도록 기호 내에 공백을 추가할 수 있습니다.

Environment

항목 Description
모드 사용자 모드, 커널 모드
대상 라이브, 크래시 덤프
플랫폼 모두

설명

다음 명령은 "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: 프라이빗 기호 필요를 참조하세요. 지역 변수의 값을 표시하려면 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 명령은 형식의 instance 표시합니다.

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> >

참고 항목

기호 확인

dv(지역 변수 표시)