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 [/s] Address [Value]
参数
/s
将$callret 伪寄存器的值以及类型信息设置为将会显示的返回值。
Address
指定函数地址。
Value
指定要显示的返回值。如果包含Value,.fnret 将Value 转换为指定函数的返回值的类型,并且将它按照返回值的格式显示出来。如果省略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 [-fFlag] Address
.fpo -d Address
.fpo -x Address
.fpo -o Address
.fpo Address
参数
-s
设置在指定地址进行FPO重载。
-fFlag
指定重载的FPO标志。在-f 和Flag间不能加入空格。如果标志有参数,在标志和参数之间必须加入一个空格。如果有多个标志,则必须重复-f 开关(例如 -fb -fp 4 -fe)。-f 开关必须和-s一起使用。 Flag 可以使用下面的值之一。
标志
|
作用
|
b
|
将fUseBP 设置为 TRUE。
|
e
|
将fUseSEH 设置为TRUE。
|
n
|
将cbFrame 设置为 FRAME_NONFPO。(默认情况下cbFrame是设置为FRAME_FPO。)
|
l Term
|
cdwLocals设置为Term。Term 要指定成需要的局部DWORD的数量。
|
p Term
|
cdwParams 设置为Term。Term 要指定成需要的参数DWORD的数量。
|
r Term
|
cbRegs 设置为Term。Term 要指定为希望的寄存器个数。
|
s Term
|
cbProcSize 设置为 Term. Term should specify the procedure size that you want.
|
t Term
|
cbFrame 设置为Term。Term 应该指定为下面的帧类型之一:
- 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)或两个(作为InstructionPtr 和StackPtr)附加的参数。
FrameIncrement
(仅x86处理器) 指定要越过基指针之后的帧的数目。例如,如果基指针0x0012FF00是第三帧的地址,命令.frame 12ff00 相当于 .frame 3,而.frame 12ff00 2 相当于 .frame 5。
StackPtr
(仅x86处理器) 指定用来确认帧的堆栈回溯的堆栈指针。如果省略StackPtr 和InstructionPtr,调试器会使用esp寄存器中的堆栈指针和eip中的指令指针。
InstructionPtr
(仅x86处理器) 指定用来确认帧的堆栈回溯的指令指针。如果省略StackPtr 和InstructionPtr,调试器会使用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 按字节比较内存区域。
如果任何指定的内存位置不在虚拟内存空间中,命令返回错误。
附加信息
关于如何操作内存的更多信息和内存相关命令的说明,查看读写内存。