NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----62

cc682/NetRoc

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

.f+, .f- (Shift Local Context)

.f+ 命令将帧序号移动到当前堆栈中的下一帧。.f- 命令将帧序号移动到当前堆栈中的上一帧。

语法

.f+  
.f-  

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

(frame)用来指定调试器用来解析局部变量的局部上下文(作用域)。

.f+.f- 命令是用来在当前调用堆栈中移动到下一帧或者前一帧的快捷方式。这些命令和下面的.frame 命令作用相同,但是.f 要更短更方便:

  • .f+ is the same as .frame @$frame + 1.
  • .f- is the same as .frame @$frame - 1.

美元符号($)表示帧的值是一个伪寄存器。At符号(@)使得调试器访问该值更快,因为它告诉调试器后面的字符串是一个寄存器或者伪寄存器。

程序运行时,局部变量的意义由程序计数器的位置决定,因为这些变量的作用域仅在定义它们的函数内部。如果没有使用.f+.f- 命令(或者 .frame 命令),调试器会使用当前函数(调用堆栈中的当前帧)的作用域作为局部上下文。

帧序号(frame number)是堆栈帧在堆栈回溯中的位置。可以使用k, kb, kd, kp, kP, kv (Display Stack Backtrace) 命令或者Calls 窗口查看堆栈回溯。第一行 (当前帧) 的帧序号是0。后面的行分别是1、2、3等等。

可以将局部上下文设置到另一个堆栈帧来查看新的局部变量信息。但是,实际可用的变量由执行的代码决定。

如果又对程序进行执行,调试器会将局部上下文重置为程序计数器的作用域。如果寄存器上下文改变,局部上下文也重置到调用堆栈顶部的帧。

附加信息

关于局部上下文的更多信息和其他上下文的设置,查看改变上下文。关于如何显示局部变量的更多信息和其他内存相关命令,查看读写内存

.fiber (Set Fiber Context)

.fiber 命令指定使用哪个纤程(fiber)作为纤程上下文( fiber context)。

语法

.fiber [Address] 

参数

Address

指定纤程的地址。如果省略该参数或者指定为0, 纤程上下文会重置为当前纤程。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

关于进程上下文、寄存器上下文和局部上下文的更多信息,查看改变上下文

.fiximports (Fix Target Module Imports)

.fiximports 命令验证和改变某个目标模块的所有静态导入链接(导入表 — 译者注)。

语法

.fiximports Module 

参数

Module

指定要调试器修正导入表的目标模块。Module 可以包含各种通配符和修饰符。该语法的更多信息,查看字符串通配符语法。如果要在Module中包含空格,必须将它用引号括起来。

环境

模式

用户模式、内核模式

目标

仅崩溃转储(仅minidump)

平台

所有

注释

只有在调试目标是minidump并且不包含它自己的可执行映像时使用.fiximports

调试器将映像映射为内存时,调试器并不会自动将映像的导入表和导出者链接起来。因此,引用到导入表的指令和与活动调试一样的形式被反汇编。可以使用.fiximports来要求调试器进行适当的导入链接。

.flash_on_break (Flash on Break)

.flash_on_break 命令指定当WinDbg最小化时,目标发生中断时,WinDbg任务栏是否进行闪烁。

语法

.flash_on_break on 
.flash_on_break off 
.flash_on_break 

参数

on

使得WinDbg最小化并且目标中断到调试器时,WinDbg的任务栏入口闪烁。这是WinDbg的默认行为。

off

阻止WinDbg的任务栏入口闪烁。

环境

.flash_on_break 命令仅在WinDbg中可以使用。不能在脚本文件中使用该命令。

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

如果不带参数使用.flash_on_break ,调试器显示当前设置。

.fnent (Display Function Data)

.fnent 命令显示指定函数的函数表入口信息。

语法

.fnent Address 

参数

Address

指定函数的地址。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.fnent 命令对符号的搜索算法和 ln (List Nearest Symbols) 命令一样。输出中首先显示最靠近的符号。然后,调试器显示这些符号的第一个的函数入口。

如果最靠近的符号不在函数表中,则不会显示信息。

下面的例子是一种可能的输出。

0:001> .fnent 77f9f9e7
Debugger function entry 00b61f50 for:
(77f9f9e7)   ntdll!RtlpBreakWithStatusInstruction   |  (77f9fa98)   ntdll!DbgPrintReturnControlC

Params:    1
Locals:    0
Registers: 0

0:001> .fnent 77f9fa98
Debugger function entry 00b61f70 for:
(77f9fa98)   ntdll!DbgPrintReturnControlC   |  (77f9fb21)   ntdll!DbgPrompt

Non-FPO

0:001> .fnent 01005a60
No function entry for 01005a60

.fnret (Display Function Return Value)

.fnret 命令显示函数的返回值的信息。

语法

.fnret [/sAddress [Value

参数

/s

$callret 伪寄存器的值以及类型信息设置为将会显示的返回值。

Address

指定函数地址。

Value

指定要显示的返回值。如果包含Value.fnretValue 转换为指定函数的返回值的类型,并且将它按照返回值的格式显示出来。如果省略Value,调试器从返回值寄存器获得函数的返回值。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

如果包含了Value参数,.fnret 命令仅仅是把这个值转换为合适的类型然后显示结果。

如果省略Value,调试器使用返回值寄存器来获得它。如果在Address指定的函数之后还有其他函数返回了,显示出来的值很可能不是指定函数返回的。

.force_radix_output (Use Radix for Integers)

.force_radix_output 命令指定整数以10进制格式还是默认基数形式显示。

语法

.force_radix_output 0 
.force_radix_output 1 

参数

0

以10进制格式显示所有整数(除了长整数)。这是调试器的默认行为。

1

以默认基数(除了长整数) 显示所有整数。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.force_radix_output 命令作用于 dt (Display Type) 命令的输出。

在WinDbg中,.force_radix_output还作用于Locals窗口Watch窗口的显示。在Locals或者Watch窗口的快捷菜单中选中或清除Always display numbers in default radix.force_radix_output有同样作用。使用这个命令之后相关窗口会自动刷新。

.force_radix_output 命令仅作用于标准整数的显示。使用.enable_long_status (Enable Long Integer Display)命令来设置长整数是以10进制还是默认基数格式显示。

使用n (Set Number Base) 命令可以修改默认基数。

.force_tb (Forcibly Allow Branch Tracing)

.force_tb 命令强制处理器在引导过程早期就进行分支跟踪。

语法

.force_tb 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

一般来说,分支跟踪要在调试器初始化了处理器控制块(PRCB)之后才会启用。该初始化在引导过程的早期进行。

但是,如果必须在这种初始化进行之前使用tb (Trace to Next Branch) 命令,可以用.force_tb 命令来更早的启用分支指令跟踪。该命令的使用要小心,因为它会改变处理器状态。

.formats (Show Number Formats)

.formats 命令在当前线程和进程上下文下对一个表达式或符号进行求值,并以多种数字格式显示出来。

语法

.formats expression 

参数

expression

指定要求值得表达式。该语法的更多信息,查看数值表达式语法

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

表达式的值以16进制、10进制、8进制和二进制形式显示出来。该表达式还会被转换成单精度浮点数和双精度浮点数格式。当字节和标准ASCII字符符合时,还会以ASCII字符格式显示。如果在允许的范围内,表达式还会被解析为一个时间戳。

下面是一个 .format命令的示例。

0:000> .formats 1c407e62
Evaluate expression:
  Hex:     1c407e62
  Decimal: 473988706
  Octal:   03420077142
  Binary:  00011100 01000000 01111110 01100010
  Chars:   .@~b
  Time:    Mon Jan 07 15:31:46 1985
  Float:   low 6.36908e-022 high 0
  Double:  2.34182e-315

Time字段以CRT时间戳 (CRT time stamp)格式显示32位值,以FILETIME 格式显示64位值。由于FILETIME 格式包含毫秒而CRT格式不包含,所以可以区别它们。

参见

? (Evaluate Expression)?? (Evaluate C++ Expression)

.fpo (Control FPO Overrides)

.fpo 命令控制帧指针省略(frame pointer omission (FPO)) 重载。

语法

.fpo -s [-fFlagAddress 
.fpo -d Address 
.fpo -x Address 
.fpo -o Address 
.fpo Address 

参数

-s

设置在指定地址进行FPO重载。

-fFlag

指定重载的FPO标志。在-fFlag间不能加入空格。如果标志有参数,在标志和参数之间必须加入一个空格。如果有多个标志,则必须重复-f 开关(例如 -fb -fp 4 -fe)。-f 开关必须和-s一起使用。 Flag 可以使用下面的值之一。

标志

作用

b

fUseBP 设置为 TRUE。

e

fUseSEH 设置为TRUE。

n

cbFrame 设置为 FRAME_NONFPO。(默认情况下cbFrame是设置为FRAME_FPO。)

l Term

cdwLocals设置为TermTerm 要指定成需要的局部DWORD的数量。

p Term

cdwParams 设置为TermTerm 要指定成需要的参数DWORD的数量。

r Term

cbRegs 设置为TermTerm 要指定为希望的寄存器个数。

s Term

cbProcSize 设置为 Term. Term should specify the procedure size that you want.

t Term

cbFrame 设置为TermTerm 应该指定为下面的帧类型之一:

  • FRAME_FPO 0
  • FRAME_TRAP 1
  • FRAME_TSS 2
  • FRAME_NONFPO 3

 

Address

指定调试器要设置或取消重载的地址,或者要显示重载设置的地址。该地址必须再当前模块列表中的某个模块中。

-d

取消指定地址处的FPO重载。

-x

取消包含Address 地址的模块中的所有FPO重载。

-o

显示包含Address 地址的模块中的所有FPO重载。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

不带参数时,.fpo 命令显示指定地址处的FPO重载信息。

一些编译器(包括Microsoft Visual Studio 6.0 和之前的版本)会创建FPO信息来指示堆栈帧是如何设置的。在堆栈回溯时,调试器需要使用FPO记录来分析堆栈。如果编译器创建了不正确的FPO信息,可以使用.fpo 命令来修正。

.frame (Set Local Context)

.frame 命令指定使用哪个局部上下文(作用域)来解析局部变量,或者显示当前的局部上下文。

语法

.frame [/r] [FrameNumber
.frame [/r= BasePtr [FrameIncrement
.frame [/r= BasePtr StackPtr InstructionPtr 

参数

/r

显示指定的局部上下文的寄存器和其他信息。

FrameNumber

指定想使用的局部上下文的帧序号。如果该参数为0,则命令指定当前帧。如果省略该参数,则显示当前的局部上下文。

BasePtr

如果在命令名(.frame)后添加了一个等号(=),指定要用来确认堆栈帧的堆栈回溯基指针。在基于x86的处理器上,在BasePtr后可以添加一个(作为 FrameIncrement)或两个(作为InstructionPtrStackPtr)附加的参数

FrameIncrement

(仅x86处理器) 指定要越过基指针之后的帧的数目。例如,如果基指针0x0012FF00是第三帧的地址,命令.frame 12ff00 相当于 .frame 3,而.frame 12ff00 2 相当于 .frame 5

StackPtr

(仅x86处理器) 指定用来确认帧的堆栈回溯的堆栈指针。如果省略StackPtrInstructionPtr,调试器会使用esp寄存器中的堆栈指针和eip中的指令指针。

InstructionPtr

(仅x86处理器) 指定用来确认帧的堆栈回溯的指令指针。如果省略StackPtrInstructionPtr,调试器会使用esp寄存器中的堆栈指针和eip中的指令指针。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

程序运行时,局部变量的意义由程序计数器的位置决定,因为这些局部变量的作用域仅在定义它们的函数内部。如果没有使用.frame 命令,调试器使用当前函数(调用堆栈中的当前帧)的作用域作为局部上下文

使用.frame 命令并指定需要的帧序号来改变局部上下文。

帧序号(frame number)是堆栈帧在堆栈回溯中的位置。可以使用k (Display Stack Backtrace)命令或者Calls 窗口查看堆栈回溯。第一行 (当前帧) 的帧序号是0。后面的行分别是1、2、3等等。

如果k命令使用n参数,则k命令堆栈回溯和帧序号。帧序号总是以16进制形式显示。另一方面,如果没有指定像0x这样的前缀,则.frame 用当前基数来识别它的参数。使用n (Set Number Base)命令来改变当前基数。

可以将局部上下文设置到另一个堆栈帧来查看另外的局部变量信息。但是,实际可用的变量由被执行的代码决定。

如果又对程序进行执行,调试器会将局部上下文重置为程序计数器的作用域。如果寄存器上下文改变,局部上下文也重置到调用堆栈顶部的帧。

附加信息

关于局部上下文和其他上下文的设置的更多信息,查看改变上下文。关于如何显示局部变量的更多信息和其他内存相关的命令,查看 读写内存

.help (Meta-Command Help)

.help 命令显示所有元命令的列表。

语法

.help 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

使用.help命令查看元命令的更多信息。查看标准命令的更多信息,使用? 命令。查看扩展命令的信息,使用!help 扩展命令。

.hh (Open HTML Help File)

.hh 命令打开Windows调试工具包文档。

语法

.hh [Text

参数

Text

指定要在帮助文档索引中查找的文本。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

进行通过Remote.exe的远程调试时不能使用该命令。

注释

.hh 命令打开Windows调试工具包的文档 (Debugger.chm)。如果指定了 Text,调试器在文档中打开Index 窗格并将Text作为关键字在索引中搜索。如果没有指定Text,调试器打开文档的Contents窗格。

附加信息

关于帮助文档的更多信息,查看使用帮助文档

.holdmem (Hold and Compare Memory)

.holdmem 命令保存内存区域并将它们和其他内存区域比较。

语法

.holdmem -a Range 
.holdmem -d { Range | Address } 
.holdmem -D 
.holdmem -o 
.holdmem -c Range 

参数

-a Range

指定要保存的内存区域。该语法的更多信息,查看地址和地址区域语法

-d { Range | Address }

指定要删除的内存区域。如果指定了Address,调试器删除已保存的任何包含该地址的内存区域。如果指定Range,调试器删除已保存的任何和Range 有重合的区域。该语法的更多信息,查看地址和地址区域语法

-D

删除所有已保存的内存区域。

-o

显示所有已保存的内存区域。

-c Range

将指定区域和所有已保存的区域比较。该语法的更多信息,查看地址和地址区域语法

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.holdmem 按字节比较内存区域。

如果任何指定的内存位置不在虚拟内存空间中,命令返回错误。

附加信息

关于如何操作内存的更多信息和内存相关命令的说明,查看读写内存

posted on 2008-06-27 13:38 NetRoc 阅读(967) 评论(0)  编辑 收藏 引用

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

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜