x (изучение символов)

Команда x отображает символы во всех контекстах, соответствующих указанному шаблону.

x [Options] Module!Symbol 
x [Options] *

Параметры

Параметры Задает параметры поиска символов. Можно использовать один или несколько из следующих параметров:

/0
Отображает только адрес каждого символа.

/1
Отображает только имя каждого символа.

/2
Отображает только адрес и имя каждого символа (не тип данных).

/D
Отображает выходные данные с помощью языка разметки отладчика.

/T
Отображает тип данных каждого символа, если тип данных известен.

/V
Отображает тип символа (локальный, глобальный, параметр, функция или неизвестный) каждого символа. Этот параметр также отображает размер каждого символа. Размер символа функции — это размер функции в памяти. Размер других символов — это размер типа данных, который представляет символ. Размер всегда измеряется в байтах и отображается в шестнадцатеричном формате.

Размер /s
Отображение только тех символов, размер которых в байтах равен значению Size. Размер символа функции — это размер функции в памяти. Размер других символов — это размер типа данных, который представляет символ. Всегда отображаются символы, размер которых не удается определить. Размер должен быть ненулевым целым числом.

/Q
Отображает имена символов в кавычках.

/P
Пропускает пробел перед открывающей скобкой, когда отладчик отображает имя функции и ее аргументы. Этот вид отображения может упростить работу, если вы копируете имена функций и аргументы из отображения x в другое расположение.

/F
Отображает размер данных функции.

/D
Отображает размер данных.

/a
Сортирует отображение по адресу в порядке возрастания.

/A
Сортирует отображение по адресу в порядке убывания.

/N
Сортирует отображение по имени в порядке возрастания.

/N
Сортирует отображение по имени в порядке убывания.

/Z
Сортирует отображение по размеру в порядке возрастания.

/Z
Сортирует отображение по размеру в порядке убывания.

Модуль
Указывает модуль для поиска. Этот модуль может быть файлом .exe, .dll или .sys. Модуль может содержать различные подстановочные знаки и описатели. Дополнительные сведения о синтаксисе см. в разделе Синтаксис подстановочных знаков строки.

Символ
Указывает шаблон, который должен содержать символ. Символ может содержать различные подстановочные знаки и описатели. Дополнительные сведения о синтаксисе см. в разделе Синтаксис подстановочных знаков строки.

Так как этот шаблон сопоставляется с символом, совпадение не учитывает регистр, а один символ подчеркивания в начале (_) представляет любое количество символов подчеркивания в начале. Вы можете добавить пробелы в symbol, чтобы можно было указать имена символов, которые содержат пробелы (например, "оператор new" или "Шаблон<A, B>"), не используя подстановочные знаки.

Среда

Элемент Описание
Режимы Пользовательский режим, режим ядра
Цели Динамический аварийный дамп
Платформы Все

Комментарии

Следующая команда находит все символы в MyModule, содержащие строку spin.

0:000> x mymodule!*spin* 

Следующая команда быстро находит символы DownloadMinor и DownloadMajor в MyModule.

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 }

В следующем примере показан параметр /f , используемый для фильтрации функций в модуле notepad.exe.

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]

В предыдущем примере размер задается в шестнадцатеричном формате, а тип данных — в десятичном формате. Таким образом, в последней строке предыдущего примера тип данных представляет собой массив из 42 указателей на неподписанные короткие целые числа. Размер этого массива составляет 42*4 = 168, а 168 отображается в шестнадцатеричном формате как 0xA8.

Параметр /sSize можно использовать для отображения только тех символов, размер которых в байтах является определенным значением. Например, команду в предыдущем примере можно ограничить символами, представляющими объекты, размер которых 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)

При работе с шаблонами рекомендуется использовать команду dt (тип отображения ), так как команда x не отображает отдельные элементы класса шаблона.

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 (отображение локальных переменных)