当.NET 应用程序在产品环境中发生故障的时候,通常留给开发者的仅仅是一个内存 dump。因为 Visual Studio 不能处理 dump 文件,所以你必须使用一个名为 WinDbg 的工具。该工具通常会和 SOS.dll 或者 Psscor4.dll 一起使用,它们是能够暴露.NET 特定细节的扩展。尽管非常强大,但是它们非常难于使用,因此开发者偶尔会创建自己的扩展。 Rodney Viana 就是这样的一个开发者,他刚刚发布了 netext 1.6.1 并将该项目开源。
Netext 中的一个有趣功能是,它能够使用一种类似于 SQL 的语法查询堆。例如,假如你想要查看最近失败的 Web 请求的列表,因为 HttpContext 对象已经被缓存了,所以你能够使用下面的语法查看失败的查询:
!wfrom -type *.HttpContext | where ( ($contains(_request._url.m_String, "http:")) && (_response._statuscode != 0n200) ) select $addr(), _request._url.m_String, _response._statusCode
下面是支持的命令列表:
显示对象详细信息的命令
- !wdo——显示 GAC 或者堆栈中的 ad-hoc 对象或者数组
- !wselect——为数组中的一个对象或者所有条目显示 ad-hoc 字段(和 level 字段)
- !wfrom——执行类似 SQL 的堆对象分析,支持比较、表达式评估和索引过滤
枚举对象
- !windex——根据不同的过滤器索引并显示对象,例如 HttpContext 类型的对象
- !wstack——转储唯一的堆栈对象
- !wheap——列出没有索引的对象并显示堆样本
- !wgchandles——转储 GC 根句柄
特殊用途
- !wdict——显示 dictionary 对象
- !whash——显示 HashTable 对象
- !whttp——列出 HttpContext 对象
- !wconfig——显示所有排列在内存中的.config 文件
- !wservice——列出 WCF 服务对象
- !weval——评估表达式列表
- !wclass——显示“反射的”类定义(字段、属性和方法)
Netext 还支持能够和聚合、字符串、XML、数组和反射一起使用的功能。
Netext 是基于 GNU 通用公共许可(GNU General Public License)版本 2 提供的。尽管 Rodney Viana 是 Microsoft 的一位雇员,但该项目是一个个人项目,Microsoft 并不为其提供支持。
查看英文原文: Introducing Rodney Viana’s WinDbg Extension for .NET Debugging
评论