Поделиться через


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 команду в начале функции (до выполнения пролога функции), вы получите неверные результаты. Отладчик использует регистр кадра для вычисления текущей обратной трассировки, и этот регистр неправильно задан для функции, пока не будет выполнен ее пролог.

В пользовательском режиме трассировка стека основана на стеке текущего потока. Дополнительные сведения о потоках см. в разделе Управление процессами и потоками.

В режиме ядра трассировка стека основана на текущем контексте регистра. Контекст регистра можно задать в соответствии с конкретным потоком, записью контекста или кадром ловушки.

Дополнительные сведения

Дополнительные сведения о контексте регистрации и других параметрах контекста см. в разделе Изменение контекстов.