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
显示传递给堆栈跟踪中每个函数的前三个参数。

c
显示干净的堆栈跟踪。 每个显示行仅包括模块名称和函数名称。

p
显示堆栈跟踪中调用的每个函数的所有参数。 参数列表包括每个参数的数据类型、名称和值。 选项 p 区分大小写。 此参数需要完整的符号信息。

P
显示堆栈跟踪中调用的每个函数的所有参数,如 p 参数。 但是,对于 P,函数参数打印在显示的第二行上,而不是打印在与其余数据的同一行上。

v
显示帧指针省略 (FPO) 信息。 在基于 x86 的处理器上,显示器还包括调用约定信息。

n
显示帧编号。

f
显示相邻帧之间的距离。 此距离是分隔实际堆栈上帧的字节数。

L
隐藏显示中的源行。 L 区分大小写。

M
使用 调试器标记语言显示输出。 显示器中的每个帧编号都是一个链接,你可以选择该链接来设置本地上下文和显示局部变量。 有关本地上下文的信息,请参阅 .frame

FrameCount
指定要显示的堆栈帧数。 除非使用 n (设置 基数) 命令更改基数,否则应以十六进制格式指定此数字。 使用 .kframes (设置堆栈长度) 命令显示默认值并更改值。

BasePtr
指定堆栈跟踪的基指针。 BasePtr仅当命令后有一个等号 (=) 时, 参数才可用。

StackPtr
指定堆栈跟踪的堆栈指针。 如果省略 StackPtrInstructionPtr,该命令将使用 rsp (或 esp) register 指定的堆栈指针,以及 rip (或 eip) register 指定的指令指针。

InstructionPtr
指定堆栈跟踪的指令指针。 如果省略 StackPtrInstructionPtr,该命令将使用 rsp (或 esp) register 指定的堆栈指针,以及 rip (或 eip) register 指定的指令指针。

WordCount
指定要转储的堆栈中DWORD_PTR值的数目。

环境  
模式 用户模式、内核模式
目标 实时、故障转储
平台 全部

注解

发出 k、、kbkpkPkv 命令时,堆栈跟踪以表格格式显示。 如果启用了行加载,则还会显示源模块和行号。

堆栈跟踪包括堆栈帧的基指针、返回地址和函数名称。

如果使用 kpkP 命令,则会显示堆栈跟踪中调用的每个函数的完整参数。 参数列表包括每个参数的数据类型、名称和值。

命令可能很慢。 例如,在调用 MyFunction2MyFunction1,调试器必须具有 的完整符号信息MyFunction1,才能显示在此调用中传递的参数。 此命令不会完全显示未在公共符号中公开的内部 Microsoft Windows 例程。

如果使用 kbkv 命令,则会显示传递给每个函数的前三个参数。 如果使用 kv 命令,则还会显示 FPO 数据。

在基于 x86 的处理器上 kv , 命令还显示调用约定信息。

使用 kv 命令时,FPO 信息将按以下格式添加到行尾。

FPO 文本 含义
FPO:[非 Fpo] 帧没有 FPO 数据。
FPO:[N1,N2,N3] N1 是参数的总数。

N2 是局部变量的 DWORD 值的数目。

N3 是保存的寄存器数。
FPO: [N1,N2] 陷阱帧 @ 地址 N1 是参数的总数。

N2 是局部变量的 DWORD 值数。

Address 是陷阱帧的地址。
FPO:TaskGate Segment:0 Segment 是任务入口的段选择器。
FPO:[EBP 0xBase] Base 是框架的基指针。

命令 kd 显示原始堆栈数据。 每个 DWORD 值显示在单独的行上。 这些行的符号信息以及关联的符号一起显示。 此格式创建比其他 k* 命令更详细的列表。 命令 kd 等效于使用堆栈地址作为参数 的 dds (显示内存) 命令。

如果在) 执行函数 prolog 之前在函数 (的开头使用 k 命令,则会收到不正确的结果。 调试器使用帧寄存器来计算当前回溯,在函数的 prolog 执行之前,不会为函数正确设置此寄存器。

在用户模式下,堆栈跟踪基于当前线程的堆栈。 有关线程的详细信息,请参阅 控制进程和线程

在内核模式下,堆栈跟踪基于当前 寄存器上下文。 可以设置寄存器上下文以匹配特定的线程、上下文记录或陷阱帧。

其他信息

有关注册上下文和其他上下文设置的详细信息,请参阅 更改上下文