Debugging Tools for Windows

!avrf

!avrf扩展用于控制Application Verifier的设置,并且显示由Application Verifier产生的各种输出。

语法

!avrf 
!avrf -a Address 
!avrf -cs { Length | -a Address } 
!avrf -hp { Length | -a Address } 
!avrf -vs { Length | -a Address } 
!avrf -dlls [ Length ] 
!avrf -ex [ Length ] 
!avrf -cnt 
!avrf -trm 
!avrf -threads [ThreadID
!avrf -trace TraceIndex 
!avrf -brk [BreakEventType
!avrf -flt 
!avrf -flt EventType Probability 
!avrf -flt break EventType 
!avrf -flt stacks Length 
!avrf -trg [ Start End | dll Module | all ] 
!avrf -skp [ Start End | dll Module | all | Time ] 

参数

-a Address
指定一个地址。会显示包含这个地址的内存分配记录、以这个地址为开始的内存释放操作记录。如果该选项前面没有–cs-hp或者–vs,那么会搜索light heap。
-cs
显示临界区(critical section)的删除日志。详细信息查看Application Verifier 文档中的"Critical Section Delete Logs"。
-hp
显示堆操作日志。详细信息查看Application Verifier文档中的"Heap Operation Logs"。
-vs
显示虚拟地址空间(virtual space)操作日志。详细信息,查看Application Verifier 文档中的"Virtual Space Operation Logs"。
-dlls
显示DLL的加载/卸载日志。详细信息查看Application Verifier 文档中的"DLL Load/Unload Logs"。
-ex
显示异常日志。详细信息查看Application Verifier文档中的"Exception Logs"。
Length
指定要显示的记录数量。如果使用了-dlls或者-ex选项,则可以省略Length来显示所有的DLL 加载/卸载操作或者所有异常记录。
-cnt
显示全局计数器(global counter)的清单。
-trm
显示所有终止和挂起线程的日志。
-threads
显示目标进程中线程的信息。对于子线程,还会显示堆栈大小和由父线程指定的CreateThread标志。
ThreadID
指定要显示的线程ID。省略时显示所有线程。
-trace TraceIndex
显示指定的TraceIndex的调用堆栈。一些结构用到了这个16位索引来标识调用堆栈。这个索引指向调用堆栈数据库(stack trace database)中的位置。如果正在分析这样的结构,那么这个选项非常有用。
-brk
表明这是一个break-event命令。不带参数使用!avrf -brk时,会显示break event设置。可以在 文档的 "Requesting Breaks on Certain Events" 中查看示例。
BreakEventType
指定break event 的type number 。查看Application Verifier 文档的"Requesting Breaks on Certain Events"获得可用type的列表。
-flt
表示这是一个fault-injection 命令。不带参数使用!avrf –flt时,显示当前的fault injection设置。查看Application Verifier 文档中的"Choosing Which Events to Fault"获得示例。
EventType
指定event的type number。查看Application Verifier 文档中的"Choosing Which Events to Fault"获得可能的type的列表。
Probability
指定该event将会失败的频率。可以是从0到100(0x64)之间的任意整数。
break
让每次该fault 被inject时,Application Verifier都中断到调试器中。这种中断的示例,查看Application Verifier 文档中的"Choosing Which Events to Fault"。
stacks
显示最近一次fault-injected 操作的调用堆栈。查看Application Verifier 文档的"Choosing Which Events to Fault"获得示例。
-trg
表明这是一个target range 命令。 不带参数使用 –trg时,显示当前的target range。详细信息查看Application Verifier文档中的"Choosing Where to Fault"。
-skp
表示这是一个exclusion range 命令。不带参数使用-trg时,显示当前的target range。详细信息查看Application Verifier 文档中的"Choosing Where to Fault"。
Start
指定target range 或者exclusion range 的开始地址。
End
指定target range 或者exclusion range 的结束地址。
Module
指定要targeted 或者excluded 的模块名。Module是完整的模块名,包括.exe.dll扩展名。不能含有路径信息。
all
使得所有的target range或者exclusion range重置。
Time
恢复执行后的Time毫秒内消除任何fault。

DLL

Windows 2000 不可用
Windows XP和之后 Exts.dll

注释

不带参数使用!avrf扩展时,会显示当前的Application Verifier选项。如果已经启用了Full page heap或者Fast fill heap选项,那么还会显示active page heap的信息。查看Application Verifier 文档中的 "Heap Operation Logs"获得示例。

如果发生了Application Verifier Stop,不带参数的!avrf扩展会显示停止的类型以及原因。查看Application Verifier 文档中的"Debugging Application Verifier Stops" 获得示例。

如果没有ntdll.dllverifier.dll的符号,那么!avrf扩展会产生错误信息。关于如何定位这种问题的信息,查看Application Verifier 文档中的"Setting Up a Debugger for Application Verifier"。

附加信息

关于如何下载和安装Application Verifier ,以及它的文档的信息,查看Application Verifier

Build machine: CAPEBUILD