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,从 adbkadb 转换 提供 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]>