Solaris 模块调试器指南

生成块

目标是指调试器正在检查的程序。 目前 MDB 提供了对以下目标类型的支持:

每个目标都导出标准属性集,包括一个或多个地址空间、一个或多个符号表、一组装入对象和一组线程。图 2–1 概述了 MDB 体系结构,包括两个内置目标和一对样例模块。

在 MDB 术语中,调试器命令又名 dcmd(读作 dee-command),是调试器中能够访问当前目标的任何属性的例程。 MDB 解析标准输入中的命令,然后执行对应的 dcmd。 每个 dcmd 还可以接受字符串或数值参数的列表,如语法所示。MDB 包含一组始终可用的内置 dcmd(在第 5 章,内置命令中介绍)。 通过使用 MDB 附带的编程 API 编写 dcmd,程序员还可以扩展 MDB 本身的功能。

walker 是说明如何遍历或迭代特定程序数据结构的元素的一组例程。 walker 从 dcmd 和从 MDB 本身封装数据结构的实现。 可以交互使用 walker,或者将它们用作元语以生成其他 dcmd 或 walker。 与使用 dcmd 一样,程序员可以通过将其他 walker 作为调试器模块的一部分进行实现来扩展 MDB。

调试器模块又名 dmod(读作 dee-mod),是包含一组 dcmd 和 walker 的动态装入的库。 在初始化过程中,MDB 尝试装入与目标中存在的装入对象对应的 dmod。 随后可以在运行 MDB 时随时装入或卸载 dmod。 MDB 提供了一组标准 dmod,用于调试 Solaris 内核。

宏文件是包含一组要执行的命令的文本文件。宏文件通常用于自动执行显示简单数据结构的过程。 MDB 提供了完全的向后兼容性以执行为 adb 编写的宏文件。 因此,Solaris 安装附带的一组宏文件可以与任一工具一起使用。

图 2–1 MDB 体系结构

此图形说明 MDB 的组件:调试器引擎之上的 MDB 语言和 MDB 模块 API。