[新闻稿存档 ^] [< 第 4 卷第 3 号] [第 5 卷第 2 号 >]
Systems Internals 通讯第 5 卷,第 1 号
http://www.sysinternals.com
版权所有 (C) 2003 Mark Russinovich
2003 年 2 月 19 日 - 本期:
编辑
SYSINTERNALS 的新增功能
- Filemon v5.01
- DebugView v4.2
- NewSID v4.02
- PsShutdown v2.01
- Autoruns v2.02
- ShareEnum v1.3
- TCPView v2.31
- Bluescreen v3.0
- Microsoft 的 Sysinternals
内部信息
- 新的 XP/Server 2003 内部视频
- 马克和大卫·所罗门在西雅图教授内部和故障排除
- Windows 2000 SP3 通用标准认证
- Visual Studio:在 LastError 上放置监视
- LameButtonText 注册表值说明
- Windows 开发历史记录
- 故障转储分析简介
Sysinternals 通讯由 Winternals Software 赞助,网址为 http://www.winternals.com. Winternals Software 是 Windows NT/2K/XP 高级系统工具的领先开发者和提供商。 Winternals Software 产品包括 ERD Commander 2002、NTFSDOS 专业版(用于 DOS的读/写 NTFS 驱动程序)和远程恢复。
Winternals 自豪地宣布,Defrag Manager 版本 2.10 是可用的最快、最彻底的企业碎片整理程序。 现在,你可以通过简单的 MMC 管理单元在整个 Windows 企业中管理碎片整理计划,甚至无需在 NT、Windows 2000 或 Windows XP 系统上安装任何客户端软件。 请访问 http://www.winternals.com/es 以获取详细信息或请求 30 天免费试用版。
大家好,
欢迎查看 Sysinternals 新闻稿。 本通讯目前有 36000 名订户。
我很高兴地通知你,大卫·所罗门是本月社论的客座作者,他在该社论中描述了他使用多个 Sysinternals 实用工具的一些实际故障排除经验。
请将新闻稿传递给你认为可能对其内容感兴趣的好友。
谢谢!
-马克
社论 - 大卫·所罗门
我有一个新的座右铭:“当有疑问时,运行 Filemon 和 Regmon(和进程资源管理器)”。
在我解释之前,请让我先感谢马克邀请我写这篇客座社论(当然,因为这是一篇关于他的工具有多有用的热烈报告,这可不像他是在帮我什么忙!)。
正如你们中的许多人所知道的,马克和我合作帮助人们了解 Windows 的内部知识。 我们的最新项目是去年创建的 Windows 2000 内部视频教程的更新,涵盖 Windows XP 和 Windows Server 2003 中的内核更改。我们的下一个 Windows 公开内部课程将于 4 月 21 日至 23 日在华盛顿州贝尔维尤进行 - 请参阅本新闻稿相关部分中有关这两部分的详细信息。 正如许多人所问的,我们正在制作适用于 XP 和 Server 2003 的 Inside Windows 2000(暂定发布日期是夏末)。
为什么我对 Sysinternals 工具如此着迷? 因为在最近一年左右,它们帮助我排查和解决了各种应用程序和系统问题,这些问题本来是无法解决的。 事实上,我无法描述使用这些工具排查了多少个完全不同、无关的问题。 即使在我认为它们帮不上忙的情况下,它们也做到了。 因此才有了我的新座右铭:“当有疑问时,运行 Filemon 和 Regmon”。
我发现有两种基本技术可以应用这些工具:
- 查看 Filemon/Regmon 跟踪中应用程序在失败前执行的最后一项操作。 这可能指向问题。
- 将出错的应用程序的 Filemon/Regmon 跟踪与正常运行系统中的跟踪进行比较。
在第一种方法中,运行 Filemon 和 Regmon,然后运行应用程序。 发生故障时,返回到 Filemon 和 Regmon 并停止日志记录(按 CONTROL+E)。 然后,转到日志的末尾,查找应用程序在出错(崩溃、挂起或其他问题)之前执行的最后一个操作。 从最后一行开始,请向后检查引用的文件和/或注册表项,这通常有助于查明问题。
当应用程序在一个系统上发生故障,但在另一个系统上工作时,请使用第二种方法。 在工作和出错的系统上获取应用程序的 Filemon 和 Regmon 跟踪,并将输出保存到日志文件。 然后,使用 Excel 打开好的日志文件和错误日志文件(采用导入向导的默认值),并删除前 3 列 (否则,比较将显示每行都不同,因为每次运行的前 3 列包含的信息不同,例如时间和进程 ID) 。 最后,比较生成的日志文件(例如 WinDiffWindows XP 上的 WinDiff 包含在可以从 XP CD 安装的免费支持工具中,或者对于 Windows NT4 和 Windows 2000,可以在资源工具包中找到它)。
现在是一些现实生活中的例子。
在安装了 Microsoft Office 97 的 Windows 2000 工作站上,Word 将在启动后不久获得 Watson 博士。 实际上,你可以在 Watson 博士出现之前键入几个字符,但无论你是否键入任何内容,在启动后的几秒钟内,Word 都会崩溃。 当然,用户已尝试卸载并重新安装 Office,但问题仍然存在。 因此,我运行了 Filemon 和 Regmon,并查看了Word 在停机前的最后一件操作。 Filemon 跟踪显示,Word 最后一项操作是打开 HP 打印机 DLL。 事实证明,工作站没有打印机,但显然曾经有过。 因此,我从系统中删除了 HP 打印机,问题消失了!
显然,Word 在启动时枚举打印机会导致加载此 DLL,这反过来又导致进程失败(为什么发生这种情况我不知道,也许用户安装了一个虚假版本,但由于系统不再有打印机,实际上已不再重要)。
在另一个示例中,Regmon 让用户避免了完全重新安装其 Windows XP 桌面系统。 问题表现是,如果用户未先手动拨打 Internet 连接,Internet Explorer (IE) 在启动时会挂起。 此 Internet 连接设置为系统的默认连接,因此启动 IE 应该会导致自动拨号到 Internet(因为 IE 设置为在启动时显示默认主页)。 遵循我的新座右铭,我运行了 Filemon 和 Regmon,并在日志中从 IE 挂起的时刻向后看。 Filemon 未显示任何异常,但 Regmon 日志显示对密钥 HKEY_CURRENT_USER\Software\Microsoft\RAS Phonebook\ATT
的查询。
用户告诉我,他曾经安装了 AT&T 拨号程序,但已卸载并手动创建了拨号连接。
由于拨号连接的名称不是“ATT”,我怀疑这是卸载注册表垃圾留下的,导致 IE 启动失败。
因此,我重命名了密钥,问题消失了!
使用“比较日志”技巧有助于解决 Access 2000 在一个程序员的 XP 工作站上尝试导入 Excel 文件时挂起的原因。 导入同一文件在其他用户的工作站上工作正常,但在这个工作站上失败。 因此,我们获取了在工作和故障系统上的 Access。 适当调整日志文件后,使用 Windiff 将其进行比较。 前几个差异是由于临时文件的名称不同,以及一些文件名因大小写差异而不同,但这些当然不是这两个系统之间的“相关差异”。
不正常的第一个区别是,访问 DLL 是从 \Windows\System32
故障系统上加载的,而不是从工作系统上的 \Program Files\Microsoft Office\Office
文件夹中加载的。
比较 DLL 后,发现 \Windows\System32
中的版本来自以前版本的 Access。 因此,用户将该 DLL 重命名为 .bad
并重新运行 Access,问题消失了!
Filemon 对发现文件权限这类问题非常有用。 许多应用程序在报告拒绝访问错误方面做得很差。 但是,运行 Filemon 会明显显示此类型的故障,因为结果列显示“访问被拒绝”,因为权限问题导致无法打开文件(最新版本甚至会显示无法访问文件的用户名)。 下面是这种情况的两个具体示例:
- 用户在启动 Word 时遇到了奇怪的宏错误;结果显示宏引用的 DOT 文件的权限已更改为禁止此用户访问。 Filemon 清楚地显示 Word 在 .DOT 文件上遇到了拒绝访问的错误。 修复权限后,问题就消失了。
- Outlook 应用程序弹出了一个消息框,显示
Application defined or object-defined error-Message ID: [Connect].[LoadGlobalVariables].[LN:?].[EN:287]
- 这是另一个示例,说明有多少应用程序在出现随机 I/O 错误时生成无用的错误消息。 同样运行 Filemon,显示拒绝访问错误(这次是拒绝访问 Outlook 访问所需的一个文件夹)。 对文件夹的权限进行调整后,问题消失了。
这些只是几个示例。我有很多 Filemon 和 Regmon(和进程资源管理器,在这里不讨论这些)挽救大局的其他成功案例。 难怪 Microsoft 产品支持部门每天使用这些工具来帮助解决客户问题,(最新统计,大约 40 篇知识库文章指向马克的工具 - 请参阅 http://www.sysinternals.com/ntw2k/info/mssysinternals.shtml 列表)。
因此,如果有疑问,请运行 Filemon 和 Regmon!
大卫·所罗门·大卫·所罗门专家研讨会http://www.solsem.com
SYSINTERNALS 的新增功能
FILEMON V5.01
Filemon 是大卫在社论中强调的实用工具之一,它经历了几年来的第一次重大修订。 新版本为已有可访问用户界面的工具带来了新的可用性级别。 最重要的增强功能是在 Windows NT、2000、XP 或 Server 2003 上运行时,Filemon 默认设置中文件系统活动的呈现方式发生了变化。我考虑了一段时间,最终根据大卫的实际用户反馈将其实现。
Filemon 以前的版本显示文件系统操作,其中包含执行操作的内部 I/O 请求的文本名称。
尽管在技术上展示精确,但许多用户并不熟悉 Windows I/O 子系统的内部工作,觉得操作(如 FASTIO_CHECK_IF_POSSIBLE
)无意义,其他操作(如报告 FASTIO_READ
操作失败)令人困惑。 还有许多其他操作示例,大多数操作被归类为“干扰”,并且操作名称看不明白意义。
Filemon 版本 5.01 的默认查看模式现在具有筛选机制,用于删除在大多数故障排除方案中无用的活动,并且为所有 I/O 操作提供直观的名称。
FASTIO_CHECK_IF_POSSIBLE
被筛选掉,FASTIO_READ
故障不显示,FASTIO_READ
成功被报告为 READ
操作。
此外,默认视图省略了系统进程中的文件系统活动,即内存和缓存管理器执行后台活动的进程,以及所有内存管理器分页活动,包括系统分页文件。 “选项|高级”菜单项将满足需要 Filemon 以前版本显示的文件系统活动的“原始”视图的用户,例如文件系统筛选器驱动程序开发人员。
包括 Microsoft 员工在内的多个用户请求 Filemon 显示发生“拒绝访问”错误的帐户,以帮助在终端服务环境中进行安全设置调试。 在响应版本 5.01 中,显示该信息以及进程在打开文件时需要的访问模式(读取、写入、删除等),以及打开文件的方式,例如文件是被覆盖还是仅在存在时才打开。
许多故障排除会话侧重于识别进程访问或尝试访问的文件,在这种情况下,读取、写入和关闭等操作只是干扰。 认识到这一事实后,我添加了一个新的“日志打开”筛选选项,可以隔离仅打开的操作。
另一个主要更改是 Filemon v5.01 处理网络映射共享的方式。 在以前的版本中,每个映射在“驱动器”菜单中显示为一个驱动器号。 现在,所有此类映射都包含在“网络”选择“卷”菜单中(该菜单重命名为“驱动器”菜单)。
选择“网络”可让 Filemon 监视所有网络共享,并报告使用“\\computer\share\directory
”命名约定访问远程文件时发生的 UNC 类型网络活动。
此更改使你能够查看网络文件活动,即使没有映射的网络共享,正如以前的 Filemon 版本所要求的那样。 最新的 Filemon 进行了许多其他小更改,包括更新菜单结构,该结构反映了几个月前我在 Regmon 中引入的更易用的菜单。
下载 Filemon v5.01
http://www.sysinternals.com/ntw2k/source/filemon.shtml
关于 FILEMON 和 REGMON 源代码
软件、硬件和网络产品的开发人员通过购买许可证来重新分发代码以支持 Sysinternals。 然而,在过去的一年里,我们发现了一系列软件,从特洛伊木马到一些价值数十亿美元的公司的商业产品,其中包含未经许可的 Sysinternals 源代码。 为了保持 Sysinternals 的增长和我们的产品获得合法许可,我们已停止发布某些产品的源代码,包括最新的 Filemon 和 Regmon 版本。 我们将继续向商业许可接受方提供源代码。 如果发现 Sysinternals 源代码的镜像,请告知我们。
DEBUGVIEW V4.2
DebugView 是一种非常常用的 Sysinternals 实用工具,软件开发人员使用它来获取其软件生成的调试输出。 版本 v4.2 反映了用户请求的一些增强需求和功能。 通过 Microsoft 请求的选项,可以在非控制台会话中运行 DebugView 时捕获在终端服务环境的控制台会话中执行的进程的调试输出。 V4.2 支持扩展的命令行选项,可以指定要加载的日志文件、历史记录深度和其他启动行为。 多个用户请求更多和更长的筛选器、筛选进程 ID 以及将注释插入输出的功能,所有这些功能都可以在最新版本中实现。 新版本修复了多个 bug,对从故障转储文件提取内核调试输出提供更好的支持,并针对超出输出列甚至屏幕宽度的文本提供更好的气球窗口。
下载 DebugView v4.2
http://www.sysinternals.com/ntw2k/freeware/debugview.shtml
NEWSID V4.02
SID(安全 ID)重复问题是使用预安装的 Windows 映像部署多个系统时会遇到的问题。 共享映像的每台计算机具有相同的内部 Windows SID,这是 Windows 安全子系统用作本地组和帐户标识符基础的标识符。 由于安全问题,共享可能会导致大多数管理员采取措施,使用 SID 更改工具将唯一的 SID 应用到每台计算机。
NewSID(Sysinternals 的 SID 更改程序)很受欢迎,因为与依赖于 DOS 或要求系统没有附加软件的其他更改程序不同,NewSID 是一个 Win32 程序,可用于将新 SID 分配给已安装应用程序的计算机。 版本 4.02 是一次拥有新向导界面的主要更新,添加了对 Windows XP 的支持,并允许重命名计算机。
许多管理员请求的一项功能是,NewSID 能够应用指定的 SID,这对于将安装设置迁移到其他计算机或重新安装可能很有用。 当 NewSID 运行时,它会导致注册表在将临时安全设置应用于注册表的某些部分,以使其可访问时增长。 此膨胀可能会导致注册表超出其大小配额,因此新的 v4.02 函数操作的最后一步是将注册表压缩到其最小大小。
下载 NewSID v4.02
http://www.sysinternals.com/ntw2k/source/newsid.shtml
PSSHUTDOWN V2.01
关闭是 Microsoft 长期以来包含在 Windows 资源工具包中、并包含在 Windows XP 安装中的工具。 在 v2.01 之前,Sysinternals PsTools 命令行管理工具包的成员 PsShutdown 只是克隆关闭,但此最新版本扩展了其功能,远远超出了 Shutdown 的功能。 例如,如果系统支持电源管理、锁定桌面和注销交互式用户(全部在本地或远程计算机上),则可以关闭和关闭电源,而无需手动安装任何客户端软件。
下载 PsShutdown v2.01
http://www.sysinternals.com/ntw2k/freeware/psshutdown.shtml
下载整个 PsTools 套件
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml
AUTORUNS V2.02
我们都对安装不需要的、在登录时运行的小程序感到恼火,并在搜索其启动命令时感到沮丧。 难怪 Windows 有近 20 种此类激活机制。 Windows Me 和 XP 附带的 MsConfig 实用工具有时可能会有所帮助,但它会错过大约一半的可能启动位置。
Autoruns 是 Bryce Cogswell 和我自己编写的 Sysinternals 工具,可显示整个画面。 其显示显示了应用程序可在系统启动或登录时自行运行的所有可能的注册表和文件位置的列表。 最新版本显示每个启动配置的映像的图标和版本信息,以便于识别,并添加用户界面增强功能,如上下文菜单一样。 此外,新版本还标识了更多启动位置,包括登录和注销脚本、登录时执行的任务计划程序任务以及资源管理器加载项启动点。
下载自动运行 v2.01
http://www.sysinternals.com/ntw2k/source/misc.shtml
SHAREENUM V1.3
系统管理员经常忽略本地网络安全的关键部分:共享文件夹。 企业环境中的用户经常创建包含文档的文件夹的共享,以便其组中的同事轻松访问。 遗憾的是,许多用户未能使用设置来锁定其共享,阻止其他员工未经授权访问潜在敏感信息。
ShareEnum 是 Bryce Cogswell 编写的 Sysinternals 实用工具,可帮助你识别恶意共享,并加强有效共享的安全性。 启动 ShareEnum 时,它使用 NetBIOS 枚举查找网络上的计算机,并报告它们导出的共享以及应用于共享的安全设置的详细信息。 在几秒钟内,即可发现打开的共享,双击共享可以在资源管理器中将其打开,以便修改其设置。 还可以使用 ShareEnum 的导出功能来保存扫描,并将当前扫描与之前保存的扫描进行比较。
下载 ShareEnum v1.3
http://www.sysinternals.com/ntw2k/source/shareenum.shtml
TCPVIEW V2.31
TCPView 是一个图形 netstat-type 实用工具,用于显示系统的活动 TCP 和 UDP 终结点的列表。 在 Windows NT、2000、XP 和 Server 2003 安装上,它会显示拥有每个终结点的进程。 版本 2.31 显示进程图像文件的图标,以便于识别。
下载 TCPView v2.31
http://www.sysinternals.com/ntw2k/source/tcpview.shtml
BLUESCREEN V3.0
Sysinternals 死亡蓝屏屏幕保护程序多年来一直是最受欢迎的下载,版本 3.0 增加了 Windows XP 兼容性。 屏幕保护程序显示一个看起来真实的蓝屏死机画面,包括,适合其运行的操作系统(例如 Windows NT、2000 或 XP)的格式设置和随机详细信息,并在暂停后模拟重新启动周期和随后重复不同的崩溃屏幕。 大卫·所罗门用它愚弄了我,我用它愚弄了他,这太令人信服了。 使用它作为你自己的屏幕保护程序或欺骗你的朋友和同事,但将其安装在生产系统上之前,请确保你的老板有幽默感。
下载 Bluescreen v3.0
http://www.sysinternals.com/ntw2k/freeware/bluescreensaver.shtml
SYSINTERNALS AT WWW.MICROSOFT.COM
以下是自上次新闻稿以来发布的 Microsoft 知识库 (KB) 文章中 Sysinternals 参考的最新一期。 我很荣幸地报告,这会使对 Sysinternals 的 KB 引用总数达到 41 个。
ACC2000:错误消息:ActiveX 组件无法创建对象 http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q319841&
操作说明:对 IIS 5.0 中的 ASP 进行故障排除 http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q309051&
OL2002:如何创建受信任的 Outlook COM 加载项 http://support.microsoft.com/default.aspx?scid=KB;en-us;327657&
PRB:错误 80004005“Microsoft Jet 数据库引擎无法打开文件'(未知)'”http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q306269&
启动、退出或注销 NetMeeting 时用户配置文件卸载失败 http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q327612&
XADM:错误消息:错误 123:文件名、目录名称或卷标签语法不正确 http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q318746&
内部信息
新的 XP/SERVER 2003 内部视频
我们关于 Windows XP/Server 2003 内部更改的新视频更新可用于预发布订购! 作为现有视频教程 INSIDE Windows 2000 的附加内容,或作为独立产品本身,此新视频提供有关 Windows XP 和 Microsoft 将于 4 月推出的新产品 Windows Server 2003 中的内核更改的培训。 涵盖的主题包括性能、可伸缩性、64 位支持、文件系统、可靠性和恢复。
Windows XP/Server 2003 更新采用与其前一代相同的交互风格,让你与大卫·所罗门和马克·鲁西诺维奇面对面,获得 76 分钟高度专注的强化培训。 它包括复习问题、实验室练习和打印的工作簿,在 DVD 视频和 CD-ROM 上的 Windows Media 中提供。
由于这些视频是在完全访问 Windows 源代码和开发团队的情况下开发的,因此你知道你得到了真实的故事。 作为终极赞美,Microsoft 已授权此视频进行其全球内部培训。
在 3 月 15 日之前购买,可享特别预发行定价! 以 950 美元购买 INSIDE Windows 2000,并免费获取 Windows XP/Server 2003 更新! 这几乎是零售价 1390 美元的 40%。 或者,仅以 169 美元(零售价 195 美元)购买独立的 Windows XP/Server 2003 更新视频。 网站提供的其他许可证配置。 若要利用此限时产品/服务,请立即在 http://www.solsem.com/vid_purchase.html 订购
马克和大卫·所罗门在华盛顿州贝尔维尤教授内部问题和故障排除
听听我和大卫·所罗门在 4 月 21 日至 23 日在华盛顿州贝尔维尤市(西雅图附近)举办的为期 3 天的 Windows 2000/XP/.NET Server 内部课程。 该课程以《Inside Windows 2000,第三版》为基础,涵盖了内核体系结构、关键系统组件的相互关系,以及系统线程、系统调用调度、中断处理、启动和关闭等机制。 了解使用 Sysinternals 工具的高级故障排除技术,以及如何使用 Windbg 进行基本的故障转储分析。 涵盖的关键子系统内部机制包括进程与线程、线程计划、内存管理、安全性、I/O 系统和缓存管理器等。 通过了解 OS 的内部工作原理,可以更有效地利用平台,更有效地调试和排查问题。
若要注册或了解详细信息,请参阅 http://www.sysinternals.com/seminar.shtml
WINDOWS 2000 SP3 通用条件认证
你们中的许多人可能熟悉术语“橙皮书”和C2,这两者都与美国政府在 20 世纪 80 年代和 90 年代用来对软件(包括操作系统)安全功能进行评分的已过时的安全评估标准有关。 自 1999 年以来,作为国防部受信任计算机系统评估标准 (TCSEC) 的一部分,橙皮书评级按照新的通用标准 (CC) 系统细分。 CC 被多个国家同意为国际安全评级标准,比 TSCEC 和英国过时的信息技术安全 (ITSEC) 评级更丰富。
当供应商根据 CC 标准认证其软件时,他们会指定一个“保护配置文件”,这是一组安全功能,评估报告软件满足保护配置文件要求的保证级别(称为评估保证级别 (EAL))。 有 7 个 EAL 具有更高的保证级别,表明对评估的软件安全功能的可靠性更有信心。
Microsoft 根据受控访问保护配置文件提交了 Windows 2000 的 CC 分级,这大致相当于 TCSEC C2 分级,在几年前和 2002 年 10 月完成了其评估。 执行评估的独立公司科学应用国际公司 (SAIC) 发现 Windows 2000 With Service Pack 3 满足控制访问控制配置文件,其评估保证级别 (EAL) 为 4,加上缺陷修复。 EAL 为 4 被视为常规用途软件可实现的最高级别,缺陷修复是指用于及时应用安全修补程序的Windows 更新机制。 此分级是迄今为止操作系统在 CC 下达到的最高级别。
VISUAL STUDIO:将 watch 放在 LASTERROR 上
如果你开发的应用程序依赖于 Win32 API,那么你几乎肯定已经编写了执行 Win32 函数的代码,但无论出于什么原因,它都不会报告特定错误。 如果是这样,你会发现此提示很有用。 通过将表达式 @ERR,hr
添加到 watch 窗口,你将看到存储为当前线程的 LastError
变量的值(GetLastError()
Win32 函数返回的值)的数字和文本表示形式。
LAMEBUTTONTEXT 注册表值说明
如果已检查 Windows 应用程序启动的 Windows 2000 或 XP 系统上的 Regmon 跟踪,则可能已看到对注册表值 HKCU\Control Panel\Desktop\LameButtonText
的引用,通常会出现 NOTFOUND
错误。 Microsoft 的某人显然有幽默感,但这有什么价值呢? 事实证明,它会在窗口标题栏上存储你在 Windows beta 版和候选发布中看到的文本,该标题栏指示你单击链接以报告反馈。 如果你可以在非预发行版本的 Windows 上启用它来放置自定义文本,那会很酷,但遗憾的是,在生产版本中禁用了它的功能。
WINDOWS 开发历史记录
保罗·图洛特有一篇由 3 部分组成的精彩文章系列文章,介绍 Windows NT 开发过程的历史。 请在 http://www.winsupersite.com/reviews/winserver2k3_gold1.asp 查看它
故障转储分析快速简介
当安装新硬件或软件后系统立即崩溃时,显然要诊断原因。 但是,有时系统崩溃偶尔会发生,没有明显的原因。 在这种情况下,确定故障原因的唯一方法是分析故障转储。 在本教程中,我将介绍 Microsoft 的在线崩溃分析 (OCA) 的工作原理,以及它如何为你提供崩溃难题的答案,然后告诉你如何设置自己的崩溃分析环境,以便你可以查看 OCA 不会或无法成功分析的崩溃。
Microsoft 在发布 Windows XP 时引入了 OCA,作为基于与崩溃相关的信息的集中式存储库的自动分析服务。 XP 系统从崩溃中重新启动后,它会提示你将崩溃信息发送到 OCA 站点 (http://oca.microsoft.com/en/Welcome.asp). 如果你同意,XP 将上传一个描述基本系统配置的 XML 文件以及一个 64 KB 的小型转储故障文件。 小型转储包含与崩溃直接相关的少量数据,例如崩溃代码、崩溃时正在执行的线程堆栈、系统上加载的驱动程序列表,以及管理崩溃发生时运行的进程的数据结构。
OCA 收到信息后,会继续对其进行分析,并将分析摘要存储在数据库中。 如果在上传后按照提示操作并访问 OCA 网站,则有机会跟踪分析。 这要求使用 Passport 帐户登录。 然后输入崩溃的名称和描述崩溃性质的一些文本。 如果 OCA 引擎将崩溃与 Microsoft 已确定原因的数据库中的其他崩溃情况相关联,则站点会通过电子邮件通知你,当你重新访问站点并查找你提交的故障时,解决方案会告诉你从何处获取驱动程序或操作系统更新。 遗憾的是,尽管 XP 中内置了 OCA 支持,并且它接受 Windows 2000 故障转储文件,但它不支持 NT 4,并且无法确定大多数崩溃的原因(至少在我的经验中如此)。
为了自行执行故障分析,你需要 Microsoft 以 Windows 调试工具包的形式提供适当的工具,你可以从 http://www.microsoft.com/ddk/Debugging/. 下载这些工具 该包包括 Windbg 分析工具等。 下载并安装工具后,运行 Windbg 并打开“文件|符号文件路径”对话框。 你可以告诉 Windbg 在何处查找要从中分析生成崩溃的操作系统版本的符号文件。 可以输入已安装符号的目录的路径,但这需要获取故障系统上安装的确切操作系统、服务包和热修补程序的符号文件。 手动跟踪符号文件很繁琐,如果要分析来自不同系统的崩溃,则需担心每个不同安装的不同符号文件集。
通过将 Windbg 指向 Microsoft 的符号服务器,可以避免符号文件的麻烦。 将其配置为使用符号服务器时,Windbg 会根据打开的故障转储自动按需下载符号文件。 符号服务器存储 NT 4 到 Server 2003 beta 版本和候选版本的符号,包括 Service Pack 和热修补程序。 将 Windbg 定向到符号服务器的语法为 srv*c:\symbols*http://msdl.microsoft.com/download/symbols
。 将 c:\symbols
替换为要存储符号文件的目录。 有关符号的详细信息,请参阅 http://www.microsoft.com/ddk/debugging/symbols.asp
在准备好分析故障转储之前,必须执行一个步骤:配置系统以生成故障转储。 为此,请在控制面板中打开系统小程序,并在 Win2k 及更高版本上单击“高级”页的“启动/关闭”按钮。 在 NT 4 上,转到小程序的“启动/关闭”选项卡。 NT 4 系统上唯一的故障转储选项是完整内存转储,其中崩溃时物理内存的全部内容将保存到指定的文件中。 在 Win2k 及更高版本上,有三个选项:迷你、内核和完全。 Win2K 以及 XP Professional 和 Home 默认为 mini;Server 系统默认为 full。 对于工作站/客户端计算机,请将设置从“微型”更改为“内核转储”,这只会保存操作系统(而不是应用程序)拥有的部分物理内存,因为这可以最大程度地减小故障转储文件的大小,并且仍然提供有关 Windbg 有效分析崩溃所需的内核数据结构的完整信息。 对于服务器系统,完全转储是可以的,但内核转储是一个安全的选择(如果你的内存系统非常大,这可能是你唯一的选择)。
现在,你已准备好分析崩溃。 发生崩溃时,只需选择“文件|打开故障转储”菜单选项将生成的转储文件加载到 Windbg 中。 当转储加载时,Windbg 开始处理它,你将看到有关操作系统版本和符号加载的消息。 然后,你将看到一条消息,其中包含文本“Bugcheck Analysis”。 消息后面的输出报告崩溃代码和崩溃代码的参数,以及“可能的原因”。
在某些情况下,Windbg 在此处执行的基本分析足以识别出错的驱动程序或内核组件。 但是,我建议始终输入以下命令:!analyze -v
。 此命令将产生相同的分析,但包含更多信息。 例如,文本将解释崩溃代码的含义,并告诉你可选参数表示的内容,有时还会提供下一步要尝试的操作的建议。 你还将看到一个堆栈跟踪,它是导致发生崩溃的代码的函数执行的记录。 如果驱动程序将错误数据传递给内核或分析查明的驱动程序,你可能会在跟踪中看到其名称,并可以将其标识为可能的根本原因。
如果要深入了解崩溃时系统的状态,可以使用许多 Windbg 命令来查看正在运行的进程、加载的驱动程序、内存使用情况等的列表。 Windbg 帮助文件还包含一个 bug 检查参考,建议你跟进以获取更多信息和指导,如果最终仍然遇到问题,建议在 Microsoft 的知识库 (KB) 中搜索崩溃代码。 Microsoft 为常见故障创建知识库文章,并将你引导至供应商网站或修复特定问题的热修补程序。
如果想看到我通过示例实时呈现此信息,请在以下任何会议上查看我的见解:
- 大卫和我将于 4 月在华盛顿州贝尔维尤举办内部和故障排除研讨会
- 5 月在亚利桑那州斯科茨代尔的 Windows 和 .NET 杂志连接:http://www.winconnections.com/win
- 今年夏天,美国技术教育大会(达拉斯)或欧洲技术教育大会(巴塞罗那)
感谢阅读 Sysinternals 新闻稿。
发布于 2003 年 2 月 19 日,星期三,下午 4:47,ottoh