cc682/NetRoc
http://netroc682.spaces.live.com/
t (Trace)
t 命令执行单条指令或源码行,并选择性的显示所有寄存器和标志位的结果。当发生子过程调用或中断时,它们的每一步也会被跟踪。
语法
用户模式
[~Thread] t [r] [= StartAddress] [Count] ["Command"]
内核模式
t [r] [= StartAddress] [Count] ["Command"]
参数
Thread
指定要解冻的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过pr、 tr或.prompt_allow -reg 命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定在停止之前要跟踪的指令条数或源码行数。每一步都在调试器命令窗口中作为单独的动作显示出来。默认值为1。
Command
指定在跟踪完成后要执行的调试器命令。该命令在标准的t结果显示之前执行。如果还使用了Count,该命令当所有跟踪完成后执行 (但是在最后一部跟踪的结果显示之前)。
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
所有
|
注释
指定了Count时,每条指令都像它们作为单独一步一样进行显示。
根据调试器在汇编模式还是源码模式,每步跟踪都执行单独的一条汇编指令或源码行。使用l+t 和 l-t 命令或WinDbg工具栏上的按钮来在这些模式间切换。
如果想跟踪大部分函数调用,但是跳过某些特定的调用,可以使用I .step_filter (Set Step Filter) 来指定哪些调用应该步过。
可以使用t命令来跟踪ROM中的指令。
如果在WinDbg中很快的跟踪很多次,调试信息窗口每次跟踪都会刷新。如果这种刷新使得响应变慢,可以使用.suspend_ui (Suspend WinDbg Interface)来暂时停止这些窗口的刷新。
附加信息
关于如何使用t命令的更多信息和相关命令的概述,查看控制调试目标。
ta (Trace to Address)
ta 命令执行程序直到到达指定地址,每一步都会显示出来(包含被调用的函数中的每一步)。
语法
用户模式
[~Thread] ta [r] [= StartAddress] StopAddress
内核模式
ta [r] [= StartAddress] StopAddress
参数
Thread
指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tar、pr、tr或.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
StopAddress
指定停止执行的地址。该地址必须刚好是一条指令的开头。
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
所有
|
注释
ta命令使得目标开始执行,一直持续到到达指定位置或遇到断点。
注意 如果在内核模式下使用ta命令,在任何虚拟地址空间中遇到指定地址时,执行都会停止。
执行时,每一步都会明确显示出来。如果有函数被调用,调试器也会跟踪进去。因此,该命令的显示就像重复使用t (Trace)命令直到程序计数器到达指定位置一样。
例如,下面的命令跟踪目标代码,直到到达函数的返回地址。
0:000> ta @$ra
附加信息
相关命令的更多信息,查看控制调试目标。
tb (Trace to Next Branch)
tb 命令执行程序直到遇到分支指令。
语法
tb [r] [= StartAddress] [Count]
参数
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tbr、pr、tr或.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定允许通过的分支数量。每次遇到分支时,指令地址和指令都会显示出来。如果省略Count,默认值是1。
环境
模式
|
x86: 仅内核模式 Itanium:用户模式、内核模式 x64:用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
x86(GenuineIntel processor family 6和之后的处理器)、Itanium、x64
|
注释
tb命令使得目标开始执行,一直持续到分支指令或遇到断点。
执行在遇到分支指令时停止。即使调试器在源码模式下,这种执行的停止也是基于汇编代码的。
分支指令包括调用、返回、跳转、记数的循环和while循环。如果调试器遇到非条件跳转或条件为真的条件分支,执行会停止下来。如果调试器遇到条件为假的分支,执行会继续。
执行停止时,会显示分支指令的地址以及任何关联的符号。该信息后面跟箭头和新的程序计数器位置的地址和指令。
tb 命令仅在当前处理器工作。如果在多处理器系统中使用tb ,到达分支指令或其他处理器发生了某些事件都会造成执行停止,不管哪一个先出现。
通常,分支跟踪在处理器控制块(PRCB)初始化完成之后就可用。(PRCB在引导进程的早期就进行初始化。) 但是,如果必须在这个时间点以前使用tb命令,可以通过 .force_tb (Forcibly Allow Branch Tracing) 来更早启用分支跟踪。要慎重使用.force_tb 命令,因为它会改变处理器状态。
附加信息
相关命令的更多信息,查看控制调试目标。
tc (Trace to Next Call)
tc命令执行程序直到到达call指令。
语法
用户模式
[~Thread] tc [r] [= StartAddress] [Count]
内核模式
tc [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tcr、pr、tr或.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定tc命令结束之前允许通过call指令的数量。默认值是1。
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
所有
|
注释、
tc命令使得目标开始执行,一直持续到call指令或遇到断点。
如果当前程序计数器已经在一条call指令上,调试器会跟踪进去并继续执行到遇到另一个call时。对这个call进行跟踪而不是执行,是tc和pc (Step to Next Call)命令唯一的区别。
在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的call指令上停止。
附加信息
相关命令的更多信息,查看控制调试目标。
tct (Trace to Next Call or Return)
tct 命令执行程序直到遇到call指令或return指令。
语法
用户模式
[~Thread] tct [r] [= StartAddress] [Count]
内核模式
tct [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tctr、pr、tr或.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定必须遇到多少call 或return 指令tct才会停止。默认值为1。
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
所有
|
注释
tct 使得目标开始执行,直到调试器遇到call或return指令或者断点。
如果当前程序计数器已经在一条call或者return指令上,调试器会跟踪进去并继续执行到遇到另一个call或return时。进行跟踪而不是执行,是tct和pct (Step to Next Call or Return)命令唯一的区别。
在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的call或return指令上停止。
附加信息
相关命令的更多信息,查看控制调试目标。
th (Trace to Next Branching Instruction)
th 命令继续执行程序直到到达任何种类的分支指令,包括条件或非条件跳转、调用、返回和系统调用。
语法
用户模式
[~Thread] th [r] [= StartAddress] [Count]
内核模式
th [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过thr、pr、tr或.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定th命令停止前要遇到的分支指令个数。默认值为1。
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
所有
|
注释
th使得目标开始执行,直到调试器遇到分支指令或者断点。
如果当前程序计数器已经在一条分支指令上,调试器会跟踪进去并继续执行到遇到另一个分支时。进行跟踪而不是执行,是th和ph (Step to Next Branching Instruction)命令唯一的区别。
th 对所有活动会话都可用。该能力是th和tb (Trace to Next Branch)的主要不同。
在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的分支指令上停止。
附加信息
相关命令的更多信息,查看控制调试目标。
tt (Trace to Next Return)
tt 命令执行程序直到遇到return指令。
语法
用户模式
[~Thread] tt [r] [= StartAddress] [Count]
内核模式
tt [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。
r
打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过ttr、pr、tr或.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。
也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。
StartAddress
指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定th命令停止前要遇到的return指令个数。默认值为1。
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动目标
|
平台
|
所有
|
注释
tt使得目标开始执行,直到调试器遇到return指令或者断点。
如果当前程序计数器已经在一条return指令上,调试器会跟踪进去并继续执行到遇到另一个return时。进行跟踪而不是执行,是tt和pt (Step to Next Return)命令唯一的区别。
在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的return指令上停止。
附加信息
相关命令的更多信息,查看控制调试目标。
u (Unassemble)
u 命令显示指定的内存中的程序代码的反汇编。
不要将该命令和~u (Unfreeze Thread) 命令混淆。
语法
u[b] Range
u[b] Address
u[b]
参数
Range
指定包含要反汇编的代码的内存区域。该语法的更多信息,查看地址和地址范围语法。如果使用了b标志,则必须使用"Address LLength"语法来指定Range,而不能使用"Address1 Address2"。
Address
指定要开始反汇编的内存区域起始地址。会反汇编8条指令(x86处理器上)或者9条指令(Itanium处理器上) 。该语法的更多信息,查看地址和地址区域语法。
b
指示要反汇编的区域是向后计算的。如果使用了ub Address ,反汇编区域是以Address结束的8或9条指令。如果用ub Address LLength语法指定区域,则反汇编以Address结尾的指定长度的内容。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
如果u命令没有指定参数,则从当前地址处开始反汇编8条指令(x86处理器上)或者9条指令(Itanium处理器上)。如果使用ub并且不使用参数,则反汇编当前地址之前的8条或9条指令。
附加信息
汇编模式调试和相关命令的更多信息,查看汇编模式调试。
uf (Unassemble Function)
uf 命令显示内存中指定函数的反汇编代码。
语法
uf [Options] Address
参数
Options
下面的选项之一:
/c
仅显示例程中的call指令而不是所有反汇编代码。Call指令对于从反汇编代码中查看调用和被调用关系很有用。
/D
创建可通过被调用者链接进行导航的调用图表(原文是Creates linked callee names for navigation of the call graph.不太好解释,用命令试一下就明白了。— 译者注)。
/m
进行不严格的分块来表明多个出口。(原文是Relaxes the blocking requirements to permit multiple exits. 不太好解释,用命令试一下就明白了。— 译者注)
/o
将显示按地址排序而不是按函数偏移。该选项会生成对整个函数的内存布局的视图。 (会将函数按分支来分块 — 译者注)
/O
为访问调用信息和断点的创建生成调用队列。(Creates linked call lines for accessing call information and creating breakpoints. )
/i
显示例程中的指令条数。
Address
指定要反汇编的函数地址。该语法的更多信息,查看地址和地址区域语法。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
该命令会根据函数的顺序显示整个函数。
附加信息
汇编模式调试和相关命令的更多信息,查看汇编模式调试。
ur (Unassemble Real Mode BIOS)
ur 命令显示指定的16位实模式代码的反汇编。
语法
ur Range
ur Address
ur
参数
Range
指定包含要反汇编的指令的内存区域。该语法的详细信息,查看地址和地址区域语法。
Address
指定要开始反汇编的内存区域起始地址。会反汇编8条指令(x86处理器上)或者9条指令(Itanium处理器上) 。该语法的更多信息,查看地址和地址区域语法。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
如果没有指定Range或Address,则从当前地址处开始反汇编8条指令(x86处理器上)或者9条指令(Itanium处理器上)。
如果在x86处理器上查看16位实模式代码,ur命令和u (Unassemble)命令都可以给出正确结果。
但是,如果实模式代码在调试器非预期的位置 (例如,一个非x86计算机从扩展卡(plug-in card)运行或模拟x86 BIOS代码的),则必须使用ur来反汇编这些代码。
如果对32位或64位代码使用ur,该命令会把他们当作16位代码来反汇编。这种情况会产生无意义的结果。
附加信息
关于如何调试BIOS代码的更多信息,查看调试BIOS代码。
ux (Unassemble x86 BIOS)
ux命令显示基于x86的BIOS代码的指令。
语法
ux [Address]
参数
Address
指定基于x86的BIOS代码的偏移。如果省略该参数或者指定0,则从BIOS的起始位置开始。
环境
模式
|
仅内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
仅x86
|
注释
调试器显示从Address偏移开始的前8行代码。
要ux命令正确工作,调试器必须能够使用HAL的符号。如果找不到该富豪,调试器会显示"couldn't resolve" 错误。
附加信息
关于如何调试BIOS代码的更多信息,查看调试BIOS代码。