Solaris 模块调试器指南

注意事项

进程核心转储文件的检查限制

对于 Solaris 2.6 之前的 Solaris 操作系统发行版生成的进程核心转储文件,MDB 不会为对其进行检查提供支持。如果在一种操作系统发行版上检查其他操作系统发行版中的核心转储文件,则运行时链接编辑器调试接口 (librtld_db) 可能无法初始化。在这种情况下,共享库的符号信息将不可用。 此外,由于用户核心转储文件中不存在共享映射,因此共享库的文本部分和只读数据可能与转储核心时进程中存在的数据不匹配。不能在 Solaris SPARC 系统上检查 Solaris Intel 系统中的核心转储文件,反之亦然。

崩溃转储文件的检查限制

Solaris 7 和早期发行版中的崩溃转储只能借助对应操作系统发行版中的 libkvm 进行检查。 如果一种操作系统发行版中的崩溃转储是使用其他操作系统发行版中的 dmod 检查的,则内核实现中的更改可能会使一些 dcmd 或 walker 无法正常工作。如果 MDB 检测到此情况,将会发出一条警告消息。不能在 Solaris SPARC 系统上检查 Solaris Intel 系统中的崩溃转储,反之亦然。

32 位调试器和 64 位调试器之间的关系

MDB 支持对 32 位程序和 64 位程序进行调试。MDB 在检查目标并确定其数据模型后,将自动重新执行具有与目标相同的数据模型的 mdb 二进制代码(如有必要)。此方法简化了编写调试器模块的任务,因为装入的模块将使用与主要目标相同的数据模型。只能使用 64 位调试器调试 64 位目标程序。64 位调试器只能在运行 64 位操作环境的系统上使用。

kmdb 可用内存的限制

可供 kmdb 使用的内存是在装入调试器时分配的,在此之后无法进行扩展。如果调试器命令尝试分配的内存多于可用内存,这些命令将无法执行。调试器会尝试从内存不足的情况正常恢复,但是在紧急情况下可能会强制终止系统。在使用 32位操作系统内核的 x86 平台上,系统内存约束尤其苛刻。

开发者信息

mdb(1) 手册页详细介绍了内置 mdb 功能,以便于开发者参考。头文件 <sys/mdb_modapi.h> 包含 MDB 模块 API 中函数的原型,SUNWmdbdm 软件包用于为目录 /usr/demo/mdb 中的示例模块提供源代码。