NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----56

cc682/NetRoc

http://netroc682.spaces.live.com/

t (Trace)

t 命令执行单条指令或源码行,并选择性的显示所有寄存器和标志位的结果。当发生子过程调用或中断时,它们的每一步也会被跟踪。

语法

用户模式

[~Threadt [r] [= StartAddress] [Count] ["Command"

内核模式

t [r] [= StartAddress] [Count] ["Command"

参数

Thread

指定要解冻的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。

r

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过prtr.prompt_allow -reg 命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。

也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。

StartAddress

指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定在停止之前要跟踪的指令条数或源码行数。每一步都在调试器命令窗口中作为单独的动作显示出来。默认值为1。

Command

指定在跟踪完成后要执行的调试器命令。该命令在标准的t结果显示之前执行。如果还使用了Count,该命令当所有跟踪完成后执行 (但是在最后一部跟踪的结果显示之前)。

环境

模式

用户模式、内核模式

目标

仅活动目标

平台

所有

 

注释

指定了Count时,每条指令都像它们作为单独一步一样进行显示。

根据调试器在汇编模式还是源码模式,每步跟踪都执行单独的一条汇编指令或源码行。使用l+tl-t 命令或WinDbg工具栏上的按钮来在这些模式间切换。

如果想跟踪大部分函数调用,但是跳过某些特定的调用,可以使用I .step_filter (Set Step Filter) 来指定哪些调用应该步过。

可以使用t命令来跟踪ROM中的指令。

如果在WinDbg中很快的跟踪很多次,调试信息窗口每次跟踪都会刷新。如果这种刷新使得响应变慢,可以使用.suspend_ui (Suspend WinDbg Interface)来暂时停止这些窗口的刷新。

附加信息

关于如何使用t命令的更多信息和相关命令的概述,查看控制调试目标

ta (Trace to Address)

ta 命令执行程序直到到达指定地址,每一步都会显示出来(包含被调用的函数中的每一步)。

语法

用户模式

[~Threadta [r] [= StartAddressStopAddress 

内核模式

ta [r] [= StartAddressStopAddress 

参数

Thread

指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。

r

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tarprtr.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

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tbrprtr.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指令。

语法

用户模式

[~Threadtc [r] [= StartAddress] [Count

内核模式

tc [r] [= StartAddress] [Count

参数

Thread

指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。

r

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tcrprtr.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。

也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。

StartAddress

指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定tc命令结束之前允许通过call指令的数量。默认值是1。

环境

模式

用户模式、内核模式

目标

仅活动目标

平台

所有

注释、

tc命令使得目标开始执行,一直持续到call指令或遇到断点。

如果当前程序计数器已经在一条call指令上,调试器会跟踪进去并继续执行到遇到另一个call时。对这个call进行跟踪而不是执行,是tcpc (Step to Next Call)命令唯一的区别。

在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的call指令上停止。

附加信息

相关命令的更多信息,查看控制调试目标

tct (Trace to Next Call or Return)

tct 命令执行程序直到遇到call指令或return指令。

语法

用户模式

[~Threadtct [r] [= StartAddress] [Count

内核模式

tct [r] [= StartAddress] [Count

参数

Thread

指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。

r

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过tctrprtr.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。

也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。

StartAddress

指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定必须遇到多少callreturn 指令tct才会停止。默认值为1。

环境

模式

用户模式、内核模式

目标

仅活动目标

平台

所有

注释

tct 使得目标开始执行,直到调试器遇到callreturn指令或者断点。

如果当前程序计数器已经在一条call或者return指令上,调试器会跟踪进去并继续执行到遇到另一个callreturn时。进行跟踪而不是执行,是tctpct (Step to Next Call or Return)命令唯一的区别。

在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的callreturn指令上停止。

附加信息

相关命令的更多信息,查看控制调试目标

th (Trace to Next Branching Instruction)

th 命令继续执行程序直到到达任何种类的分支指令,包括条件或非条件跳转、调用、返回和系统调用。

语法

用户模式

[~Threadth [r] [= StartAddress] [Count

内核模式

th [r] [= StartAddress] [Count

参数

Thread

指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。

r

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过thrprtr.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。

也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。

StartAddress

指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定th命令停止前要遇到的分支指令个数。默认值为1。

环境

模式

用户模式、内核模式

目标

仅活动目标

平台

所有

注释

th使得目标开始执行,直到调试器遇到分支指令或者断点。

如果当前程序计数器已经在一条分支指令上,调试器会跟踪进去并继续执行到遇到另一个分支时。进行跟踪而不是执行,是thph (Step to Next Branching Instruction)命令唯一的区别。

th 对所有活动会话都可用。该能力是thtb (Trace to Next Branch)的主要不同。

在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的分支指令上停止。

附加信息

相关命令的更多信息,查看控制调试目标

tt (Trace to Next Return)

tt 命令执行程序直到遇到return指令。

语法

用户模式

[~Threadtt [r] [= StartAddress] [Count

内核模式

tt [r] [= StartAddress] [Count

参数

Thread

指定要继续执行线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只有用户模式下可以指定线程。

r

打开或关闭寄存器和标志位的显示。默认情况下,寄存器和标志会被显示出来。可以通过ttrprtr.prompt_allow -reg命令来禁止显示寄存器。所有这三个命令都可以控制相同的设置,可以用它们中任意一个来覆盖前面命令的设置。

也可以使用l-os来禁止显示寄存器。该设置 和其他三条命令是分离的。使用rm (Register Mask) 命令来控制显示哪些寄存器和标志位。

StartAddress

指定执行开始的地址。如果不使用StartAddress,则从指令指针指向的位置开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定th命令停止前要遇到的return指令个数。默认值为1。

环境

模式

用户模式、内核模式

目标

仅活动目标

平台

所有

注释

tt使得目标开始执行,直到调试器遇到return指令或者断点。

如果当前程序计数器已经在一条return指令上,调试器会跟踪进去并继续执行到遇到另一个return时。进行跟踪而不是执行,是ttpt (Step to Next Return)命令唯一的区别。

在源码模式下,一个源码行可能和多条汇编指令对应。该命令不会在当前源码行的return指令上停止。

附加信息

相关命令的更多信息,查看控制调试目标

u (Unassemble)

u 命令显示指定的内存中的程序代码的反汇编。

不要将该命令和~u (Unfreeze Thread) 命令混淆。

语法

u[bRange 
u[bAddress
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 [OptionsAddress 

参数

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处理器上) 。该语法的更多信息,查看地址和地址区域语法

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

如果没有指定RangeAddress,则从当前地址处开始反汇编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代码

posted on 2008-06-21 14:37 NetRoc 阅读(656) 评论(1)  编辑 收藏 引用

评论

# re: WinDbg 文档翻译----56 2009-02-27 11:37 justdoityouself

好东西,收了~  回复  更多评论   

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜