.NET 调试实例
这是一个系列的调式实例,目的是为了帮助你在调式.NET应用程序中最常见的挂起(Hang)、性能(performance)、内存(memory)和系统崩溃(crash)方面获得一些上手的经验。
这些实例都是用ASP.NET写的,这意味着在你安装这些实例的机器上必须已经安装了IIS和.net framework 2.0。
每一个实例都会有一些关于如何开始的介绍,但是为了给你更多的机会去自己实践,实例的介绍会故意保持非常简单。当你遇到困难的时候,可以参考注意事项(Hints)。
如果时间允许,新实例将发布在 http://blogs.msdn.com/Tess(我计划每周更新一个实验)。
因为所有实例都将使用相同的Web站点来做实验,所以所有实例只需要按照一个应用程序就够了。
注意:这些实例将导致CPU的高使用率、高内存消耗和崩溃,所以一定要确保你只把这些实例安装在那些没有人会因为系统挂起或Web服务崩溃而抱怨的开发用的机器上。
安装
1.下载实例站点(见后面的附件)并解压到你的硬盘上。(刚刚上传了一个不需要Framework 3.5的版本)
2.在IIS中新建一个名称为BuggyBits的虚拟目录。
3. 浏览默认站点 http://localhost/buggybits/default.htm ,以确保您正确设置了虚拟目录。
4.浏览公司信息页面 http://localhost/BuggyBits/CompanyInformation.aspx,以确保您能够正确浏览ASP.NET页面。
5.从 http://www.microsoft.com/whdc/devtools/debugging/default.mspx 下载并安装Windows调试工具集(debugging tools for windows)。
6.通过双击运行Internetconnections.reg文件来改变IE浏览器对于相同站点默认的对外连接数。(注意:如果你感觉这样直接修改注册表不爽,你可以在记事本查看这个文件,然后手工修改注册表)
7.安装 tinyget(IIS6.0资源包的一部分 http://support.microsoft.com/kb/840671),我们将通过使用这个工具给一些页面施压,以便产生挂起和内存泄漏。
术语和工具
每个实例/实验都假设你已经熟悉下表中的内容:
Windbg
随Windows调试工具集一起安装的调试器
默认情况下会安装在“C:\program files\debugging tools for windows”
Adplus
自动抓取内存转储文件的脚本,同意也安装在Windows调试工具集的目录里。
Debuggers directory
典型的目录是“ c:\program files\debugging tools for windows”
SOS
.NET托管调试扩展
同.Net Framework同时安装并存在于Framework目录(通常是“C:\Windows\Microsoft.NET\Framework\v2.0.50727”),为了方便,你可以直接拷贝sos.dll到Debuggers directory。
Loading SOS
可以通过在Windbg的命令行窗口运行".load<路径到sos.dll>\sos.dll"命令来加载SOS扩展,或者通过运行".loadby sos mscorwks"命令(这两种方式都是从Framework的目录加载的sos.dll)。如果sos.dll已经被拷贝到调试器目录,你只要使用简单的".load sos"命令就可以了。
Setting up symbols
符号(Symbols)是用来在调试本地/非托管程序时,查看非托管堆栈时用的。更多信息请参考: http://blogs.msdn.com/tess/archive/2005/12/05/why-do-i-get-weird-function-names-on-my-stack-a-discussion-on-symbols.aspx 。可以在Windbg中运行如下命令来设置符号的路径:
.symfix c:\mycache
.reload
"c:\mycache"是在本地缓存的符号文件的路径。 如果在Windbg里询问是否保存工作空间的的时候选择了保持,那么下次调式的时候,这个符号路径仍然有效。
Tinyget TinyGet 5.2 (TinyGet.exe)是一个命令行的超文本传输协议(HTTP)客户端,支持多线程和循环(looping)。你可以使用TinyGet测试和解决客户端和服务之间通讯的问题。使用TinyGet,你可以通过配置许多不同的参数的方式自定义你的测试需求,包括身份验证方法, HTTP版本,输出格式。 您也可以使用脚本指定循环和多线程。