注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

_

_

 
 
 

日志

 
 

Microsoft 应用程序验证器  

2011-06-13 20:02:14|  分类: VC C++ MFC JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Microsoft 应用程序验证器

1.4 Microsoft 应用程序验证器

每个有经验的开发人员都应该知道应用程序验证器(Application Verifier)这个工具。通过在进程中启用应用程序验证器,你可以捕捉所有的常规编程错误。这些错误包括无效的句柄,锁,文件路径等。一种良好的编程习惯是,在开发过程中为所有的相关进程启用应用程序验证器。然而,在应用程序验证器中的某些测试设置(Test Setting)可能极大地影响程序的执行速度,这可能使得一些与时间相关的问题无法暴露出来。解决这个问题的方法之一就是让应用程序验证器始终处于启用的状态,然后选择在特定的时刻禁用它并且再次运行完整的测试集合以确保与时间相关的问题彻底消失。启用应用程序验证器的另一个最佳时机就是在修改软件产品中的错误(bug)时。通过启用应用程序验证器,你可以确保在修改错误时不会引入新的问题。

应用程序验证器的安装过程非常简单,只需使用默认的安装选项。在安装完成之后,你可以通过点击“Start”按钮,然后依次选择“All Programs”,“Application  Verifier”来启动程序。在图1.3中给出了应用程序验证器的启动界面。

图1.3 应用程序验证器的启动界面

在“Applications”面板中显示了当前正在执行验证的应用程序。你可以通过“File”菜单中的“Add Application”来增加应用程序。反之,你还可以通过“File”菜单中的“Delete Application”来移除应用程序。

要改变某个应用程序的设置,首先在左边的面板中选择该应用程序,然后选择“View”菜单中的“Property Window”。这将在启动窗口的底部增加一个属性设置区,在属性设置区中可以控制以下行为:

■Propagate:当前映象(Image)的测试设置是否应该传递到子进程。如果设置了这个属性,那么当前映象的测试设置将被传递到子进程。

■AutoClr:如果设置了这个属性,那么当应用程序验证器开始运行时,将禁止在这个映象上的所有测试设置。

■AutoDisableStop:如果设置了这个属性,那么对于给定的问题,应用程序验证器只会报告一次。

■LoggingWithLocksHeld:如果设置了这个属性,那么应用程序验证器将记录DLL的加载和卸载等事件。需要注意的是,这将给应用程序带来一些问题,因为记录事件的动作需要在执行DllMain函数期间进行I/O操作。

要想获得每个测试设置的简短描述,可以将鼠标停在相应的测试设置上,直到出现一个提示信息。这个提示信息将告诉你是否需要通过调试器来查看这些测试的结果。

要想获得每个测试设置的详细描述,可以在测试设置上点击鼠标右键,然后选择以下两个选项之一:

■Properties:允许你控制所选测试设置的属性。例如,在Handles上选择Properties,可以指定在句柄跟踪时记录的信息数量。需要注意的是,并非所有的测试设置都有Properties选项。

■Verifier Stop Options:允许你控制所选测试设置的选项。在图1.4中给出了在Handles测试设置上选择“Verifier Stop Options ”时弹出的对话框。

图1.4在Handles上选择“Verifier Stop Options ”弹出的对话框

上述对话框可以分为几个部分:

■在“Verifier Stop”中包含了该测试设置能够执行的所有验证停顿(Verifier Stop)。在图1.4中的“Verifier Stop”部分中显示了,在验证句柄时有6个可用的验证停顿。在这个窗口中的所有其他内容都是与所选中的验证停顿码(Verifier Stop Code)相关的。

■在“Description”中给出了对所选中的验证停顿的详细描述。

■“Inactive”复选框控制着是否激活所选中的验证停顿。

■在“Severity”中控制验证停顿的严重程度。这个选项将直接影响验证停顿的表现形式。例如,如果将验证停顿00000300设置为“Ignore”,那么当这个停顿被触发时将不会中断到调试器(Break Into Debugger)。

■在“Error Reporting”中可以进一步指定在验证停顿被触发时发生的行为。复选框包括是否采取记录行为(例如是否被记录到某个文件中)以及是否生成栈回溯。单选按钮将指定当触发验证停顿时调试器的行为。你可以选择触发一个断点,抛出一个异常或者不发生任何中断。

■在“Miscellaneous”中可以指定验证停顿的触发频率。如果选中了复选框“Stop Once”,那么这个验证停顿只有在第一次遇到时才会触发。如果选中了复选框“Non Continuable”,那么当验证停顿被触发时将中断到调试器中,并且不能从验证停顿中恢复过来——这实际上就是使进程不能继续执行。

在启动界面中的Tests面板(参见图1.3)中给出了所有的测试设置。如果选中了某个复选框,那么将为在“Applications”面板中选中的进程启用相应的测试设置。在Tests面板正下方是关于测试设置的一个简短描述。

当对某个应用程序启用验证后,你可以启动这个程序,而应用程序验证器将在后台运行。根据测试设置的配置方式,你可以通过两种方式来查看应用程序验证器的运行结果。第一种方式就是查看相应的日志文件,首先选择菜单“View”下的“Logs”选项,然后再选择想要查看的应用程序日志文件。需要指出的是,并非所有的测试设置都是通过日志文件来报告结果。有些测试设置需要通过调试器来查看生成的结果。要想知道哪些测试设置需要通过调试器来查看结果,可以通过将鼠标悬停在测试设置上来获得帮助信息。如果某个测试设置需要使用调试器,那么你必须在调试器下运行程序以查看结果。

当应用程序验证器要求将调试器附加到进程上时,输出结果将遵循以下的格式:

VERIFIER STOP <stop-code> : <PID> : <message>
parameter -1: <description>
parameter -2: < description >
parameter -3: < description >
parameter -4: < description >

其中“stop-code”表示发生了指定的验证违例事件,“PID”表示发生故障进程的ID,“message”则是对故障的简单文本描述。参数列表取决于被执行的验证类型。

例如,在下面的输出结果给出了当进程试图关闭一个无效句柄时应用程序验证器所报告的信息。

通过GUI模式来为程序启用测试是非常方便的,但有时候我们需要以自动的方式来启动测试。例如,软件产品是在每天晚上构建的,并且在构建完成之后立即启动自动测试。作为测试过程的一部分,质量保证小组要求在测试期间启用应用程序验证器。此时,测试人员无需通过GUI版本的应用程序验证器在每天晚上手动启动测试过程,而是可以编写一个脚本并通过控制台版本的应用程序验证器来启动测试。应用程序验证器的默认安装路径为:

C:\windows\system32\appverif.exe

如果在启动appverif.exe时使用了/?开关(Switch)时,那么你将看到以下输出:

要想为指定的程序启用所有的测试设置,可以使用下面的命令行:

appverif.exe –enable * -for myexecutable.exe

除了为指定的程序启用测试设置之外,还可以从调试器中控制应用程序验证器。扩展命令!avrf正是用于从调试器中控制应用程序验证器。完整的测试设置列表请参见附录A,“应用程序验证器的测试设置”。

  评论这张
 
阅读(1186)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017