Solaris 模块调试器指南

前言

模块调试器 (Modular Debugger, MDB) 是用于 SolarisTM 操作系统的高度可扩展的通用调试工具。《Solaris 模块调试器指南》介绍如何使用 MDB 调试复杂的软件系统,尤其着重介绍了可用于调试 Solaris 内核以及关联的设备驱动程序和模块的工具。 本书还包括对 MDB 语言语法、调试器功能和 MDB 模块编程 API 的完整参考和讨论。


注意 –

此 Solaris 发行版支持使用以下 SPARC® 和 x86 系列处理器体系结构的系统:UltraSPARC®、SPARC64、AMD64、Pentium 和 Xeon EM64T。支持的系统可以在 http://www.sun.com/bigadmin/hcl 上的《Solaris 10 Hardware Compatibility List》中找到。本文档列举了在不同类型的平台上进行实现时的所有差别。

在本文档中,术语 “x86” 指使用与 AMD64 或 Intel Xeon/Pentium 产品系列兼容的处理器生产的 64 位和 32 位系统。若想了解本发行版支持哪些系统,请参见《Solaris 10 Hardware Compatibility List》。


目标读者

如果您是一名侦探,正在调查犯罪现场,您可能会采访目击者,并要求他们描述发生的情况和所看到的人员。 但是,如果没有目击者或者这些描述证明不够充分,您可能考虑收集指纹和法庭证据,以便进行 DNA 检查来帮助破案。通常,软件程序失败分成类似的两类:可以用源代码级调试工具解决的问题,以及需要底层调试工具、检查核心文件和了解汇编语言才能诊断和更正的问题。 MDB 是专门用于简化对这第二类问题进行分析的调试器。

也许不需要在每种情况下都使用 MDB,就像侦探不需要显微镜和 DNA 证据来侦破每个犯罪行为。但是,为诸如操作系统之类的复杂底层软件系统编程时,这些情况可能会频繁出现。 因此,MDB 设计为一个调试框架,可以使用它构造自己的自定义分析工具,从而帮助诊断这些问题。 MDB 还提供了一组功能强大的内置命令,可以使用它们在汇编语言级别上分析程序的状态。

如果您不熟悉汇编语言编程和调试,请参见相关书籍和文章,您可能会发现其中提供的参考资料是很有用的。

您还应该反汇编将要调试的程序中相关的各种函数,以便熟悉程序的源代码与对应汇编语言代码之间的关系。 如果计划使用 MDB 调试 Solaris 内核软件,则应该仔细阅读第 8 章,内核调试模块和第 9 章,使用内核内存分配器进行调试。这两章提供有关为调试 Solaris 内核软件而提供的 MDB 命令和工具的更详细信息。

本书的结构

第 1 章,模块调试器概述概述调试器。本章适用于所有用户。

第 2 章,调试器概念介绍 MDB 体系结构,并说明在整本书中使用的调试器概念的术语。 本章适用于所有用户。

第 3 章,语言语法介绍 MDB 语言的语法、运算符和计算规则。 本章适用于所有用户。

第 4 章,交互介绍 MDB 交互式命令行编辑工具和输出页面调度程序。 本章适用于所有用户。

第 5 章,内置命令介绍一组始终可用的内置调试器命令。 本章适用于所有用户。

第 6 章,执行控制介绍用于控制实时运行程序的执行的 MDB 工具。本章适用于应用程序开发者和设备驱动程序开发者。执行控制功能对于系统管理员可能也是很有用的。

第 7 章,内核执行控制介绍用于控制特定于 kmdb 的实时操作系统内核的执行的 MDB 工具。本章适用于操作系统内核开发者和设备驱动程序开发者。

第 8 章,内核调试模块介绍一组为调试 Solaris 内核而提供的可装入调试器命令。 本章适用于打算检查 Solaris 内核崩溃转储的用户和内核软件开发者。

第 9 章,使用内核内存分配器进行调试介绍 Solaris 内核内存分配器的调试功能和为利用这些功能而提供的 MDB 命令。 本章适用于高级程序员和内核软件开发者。

第 10 章,模块编程 API介绍用于写入可装入调试器模块的工具。 本章适用于高级程序员和打算开发对 MDB 的自定义调试支持的软件开发者。

附录 A,选项 提供 MDB 命令行选项的参考。

附录 B,注意事项 提供有关使用调试器的警告和说明。

附录 C,从 adb 和 kadb 转换 提供 adb 命令及其 MDB 等效项的参考。adb 命令由 mdb 实现。

附录 D,从 crash 转换 提供 crash 命令及其 MDB 等效项的参考。Solaris 中不再存在 crash 命令。

相关书籍和文章

建议您阅读以下与需要执行的任务有关的书籍和文章:

联机访问 Sun 文档

可以通过 docs.sun.comSM Web 站点联机访问 Sun 技术文档。您可以浏览 docs.sun.com 文档库或查找某个特定的书名或主题。URL 为 http://docs.sun.com。

印刷约定的含义

下表介绍了本书中的印刷约定。

表 P–1 印刷约定

字体或符号 

含义 

示例 

AaBbCc123

 命令、文件和目录的名称;计算机屏幕输出

编辑 .login 文件。

使用 ls -a 列出所有文件。

machine_name% you have mail.

AaBbCc123

 用户键入的内容,与计算机屏幕输出的显示不同machine_name% su Password:

AaBbCc123

 要使用实名或值替换的命令行占位符

要删除文件,请键入 rm filename。

AaBbCc123

保留未译的新词或术语以及要强调的词 

这些称为 class 选项。

新词术语强调

新词或术语以及要强调的词 

请勿保存文件。

必须成为超级用户才能执行此操作。

《书名》 

书名 

阅读《用户指南》的第 6 章。

命令中的 shell 提示符示例

下表列出了 C shell、Bourne shell 和 Korn shell 的缺省系统提示符和超级用户提示符,以及 MDB 调试器提示符。

表 P–2 Shell 提示符

Shell 

提示符 

 C shellmachine_name%
 C shell 超级用户machine_name#
 Bourne shell 和 Korn shell$
 Bourne shell 和 Korn shell 超级用户#
mdb>
kmdb[cpu]>