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
指定堆栈跟踪的堆栈指针。 如果省略 StackPtr
和 InstructionPtr
,该命令将使用 rsp (或 esp) register 指定的堆栈指针,以及 rip (或 eip) register 指定的指令指针。
InstructionPtr
指定堆栈跟踪的指令指针。 如果省略 StackPtr
和 InstructionPtr
,该命令将使用 rsp (或 esp) register 指定的堆栈指针,以及 rip (或 eip) register 指定的指令指针。
WordCount
指定要转储的堆栈中DWORD_PTR值的数目。
环境 | |
---|---|
模式 | 用户模式、内核模式 |
目标 | 实时、故障转储 |
平台 | 全部 |
注解
发出 k
、、kb
、 kp
kP
或 kv
命令时,堆栈跟踪以表格格式显示。 如果启用了行加载,则还会显示源模块和行号。
堆栈跟踪包括堆栈帧的基指针、返回地址和函数名称。
如果使用 kp
或 kP
命令,则会显示堆栈跟踪中调用的每个函数的完整参数。 参数列表包括每个参数的数据类型、名称和值。
命令可能很慢。 例如,在调用 MyFunction2
时MyFunction1
,调试器必须具有 的完整符号信息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] 陷阱帧 @ 地址 | N1 是参数的总数。 N2 是局部变量的 DWORD 值数。 Address 是陷阱帧的地址。 |
FPO:TaskGate Segment:0 | Segment 是任务入口的段选择器。 |
FPO:[EBP 0xBase] | Base 是框架的基指针。 |
命令 kd
显示原始堆栈数据。 每个 DWORD 值显示在单独的行上。 这些行的符号信息以及关联的符号一起显示。 此格式创建比其他 k*
命令更详细的列表。 命令 kd
等效于使用堆栈地址作为参数 的 dds (显示内存) 命令。
如果在) 执行函数 prolog 之前在函数 (的开头使用 k
命令,则会收到不正确的结果。 调试器使用帧寄存器来计算当前回溯,在函数的 prolog 执行之前,不会为函数正确设置此寄存器。
在用户模式下,堆栈跟踪基于当前线程的堆栈。 有关线程的详细信息,请参阅 控制进程和线程。
在内核模式下,堆栈跟踪基于当前 寄存器上下文。 可以设置寄存器上下文以匹配特定的线程、上下文记录或陷阱帧。
其他信息
有关注册上下文和其他上下文设置的详细信息,请参阅 更改上下文。