k, kb, kc, kd, kp, kP, kv (обратная трассировка стека отображения)
Команды k* отображают кадр стека заданного потока со связанными сведениями.
Пользовательский режим, процессор x86
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr StackPtr InstructionPtr
[~Thread] kd [WordCount]
Режим ядра, процессор x86
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr StackPtr InstructionPtr
[Processor] kd [WordCount]
Пользовательский режим, процессор x64
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[~Thread] kd [WordCount]
Режим ядра, процессор x64
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[Processor] kd [WordCount]
Пользовательский режим, процессор ARM
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[~Thread] kd [WordCount]
Режим ядра, процессор ARM
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[Processor] kd [WordCount]
Параметры
Поток
Указывает отображаемый стек потоков. Если этот параметр не указан, отобразится стек текущего потока. Дополнительные сведения о синтаксисе потоков см. в разделе Синтаксис потока. Потоки можно указать только в пользовательском режиме.
Процессор
Указывает процессор, стек которого должен отображаться. Дополнительные сведения о синтаксисе процессора см. в разделе Синтаксис нескольких процессоров.
b
Отображает первые три параметра, которые передаются каждой функции в трассировке стека.
с
Отображает трассировку чистого стека. Каждая отображаемая строка содержит только имя модуля и имя функции.
p
Отображает все параметры для каждой функции, вызываемой в трассировке стека. Список параметров содержит тип данных, имя и значение каждого параметра. Параметр p
учитывает регистр. Для этого параметра требуются полные сведения о символах.
P
Отображает все параметры для каждой функции, вызываемой в трассировке стека, например p
параметр . Однако для P
параметры функции печатаются во второй строке отображения, а не в той же строке, что и остальные данные.
v
Отображает сведения об упущении указателя кадра (FPO). На процессорах на базе x86 дисплей также содержит сведения о соглашении о вызовах.
n
Отображает номера кадров.
f
Отображает расстояние между смежными кадрами. Это расстояние — количество байтов, разделяющих кадры в фактическом стеке.
L
Скрывает строки источника на экране. L
с учетом регистра.
M
Отображает выходные данные с помощью языка разметки отладчика. Каждый номер кадра на экране — это ссылка, которую можно выбрать, чтобы задать локальный контекст и отобразить локальные переменные. Сведения о локальном контексте см. в разделе .frame.
FrameCount
Указывает количество отображаемых кадров стека. Это число следует указывать в шестнадцатеричном формате, если только вы не изменили радикс с помощью команды n (задать число). Используйте команду .kframes (задать длину стека), чтобы отобразить значение по умолчанию и изменить значение.
BasePtr
Указывает базовый указатель для трассировки стека. Параметр BasePtr
доступен только при наличии знака равенства (=) после команды.
StackPtr
Указывает указатель стека для трассировки стека. Если опустить StackPtr
и InstructionPtr
, команда использует указатель стека, который указывает регистр rsp (или esp), и указатель инструкции, который указывает регистр rip (или eip).
InstructionPtr
Указывает указатель инструкции для трассировки стека. Если опустить StackPtr
и InstructionPtr
, команда использует указатель стека, который указывает регистр rsp (или esp), и указатель инструкции, который указывает регистр rip (или eip).
WordCount
Указывает количество DWORD_PTR значений в стеке для дампа.
Среда | |
---|---|
Режимы | Пользовательский режим, режим ядра |
Цели | Динамический аварийный дамп |
Платформы | Все |
Комментарии
При выполнении k
команд , kb
, kp
, kP
или kv
трассировка стека отображается в табличном формате. Если загрузка строк включена, также отображаются исходные модули и номера строк.
Трассировка стека включает базовый указатель для кадра стека, обратный адрес и имена функций.
При использовании kp
команд или kP
отображаются полные параметры для каждой функции, вызываемой в трассировке стека. Список параметров содержит тип данных, имя и значение каждого параметра.
Команда может выполняться медленно. Например, при MyFunction1
вызове MyFunction2
отладчик должен иметь полные сведения о символах для MyFunction1
отображения параметров, передаваемых в этом вызове. Эта команда не полностью отображает внутренние подпрограммы Microsoft Windows, которые не представлены в открытых символах.
При использовании kb
команд или kv
отображаются первые три параметра, которые передаются в каждую функцию. При использовании kv
команды также отображаются данные FPO.
На процессоре x86 команда также отображает сведения о соглашении kv
о вызовах.
При использовании kv
команды сведения о FPO добавляются в конце строки в следующем формате.
Текст FPO | Значение |
---|---|
FPO: [не Fpo] | Нет данных FPO для кадра. |
FPO: [N1,N2,N3] | N1 — общее количество параметров. N2 — количество значений DWORD для локальных переменных. N3 — количество сохраненных регистров. |
FPO: [N1,N2] TrapFrame @ Address | N1 — общее количество параметров. N2 — количество значений DWORD для локальных. Address — это адрес кадра ловушки. |
FPO: TaskGate Segment:0 | Segment — это селектор сегментов для шлюза задачи. |
FPO: [EBP 0xBase] | Base — это базовый указатель для кадра. |
Команда kd
отображает необработанные данные стека. Каждое значение DWORD отображается в отдельной строке. Сведения о символах отображаются для этих строк вместе со связанными символами. Этот формат создает более подробный список, чем другие k*
команды. Команда kd
эквивалентна команде dds (отображаемая память), которая использует адрес стека в качестве параметра.
Если вы используете k
команду в начале функции (до выполнения пролога функции), вы получите неверные результаты. Отладчик использует регистр кадра для вычисления текущей обратной трассировки, и этот регистр неправильно задан для функции, пока не будет выполнен ее пролог.
В пользовательском режиме трассировка стека основана на стеке текущего потока. Дополнительные сведения о потоках см. в разделе Управление процессами и потоками.
В режиме ядра трассировка стека основана на текущем контексте регистра. Контекст регистра можно задать в соответствии с конкретным потоком, записью контекста или кадром ловушки.
Дополнительные сведения
Дополнительные сведения о контексте регистрации и других параметрах контекста см. в разделе Изменение контекстов.