mdb(1) 模块调试器可以应用于以下文件类型:
实时操作系统组件
操作系统故障转储
用户进程
用户进程核心转储
目标文件
mdb 调试器可为分析内核问题提供复杂的调试支持。本节概述了 mdb 功能。有关 mdb 的完整讨论,请参阅Oracle Solaris Modular Debugger Guide。
尽管 mdb 可用来改变实时内核状态,但 mdb 缺少 kmdb 提供的内核执行控制。因此,kmdb 是进行运行时调试的首选调试器,而 mdb 调试器更多用于静态情况。
mdb 为实现调试器模块提供了大量编程 API,从而使驱动程序开发者可以实现定制调试支持。mdb 调试器还提供了许多可用功能,如命令行编辑、命令历史记录、输出页面调度程序和联机帮助。
mdb 调试器提供了一组丰富的模块和 dcmd。借助这些工具,可以调试 Oracle Solaris 内核、任何关联的模块以及设备驱动程序。通过这些功能可以执行一些任务,如:
阐明复杂的调试查询
查找特定线程分配的所有内存
列显内核 STREAM 的直观图
确定特定地址所引用的结构类型
在内核中查找已泄漏的内存块
分析内存以查找栈跟踪
将 dcmd 组装到用于创建定制操作且名为 mods 的模块中
首先切换到崩溃目录,键入 mdb 并指定系统故障转储,如以下示例所示。
示例 23-7 针对故障转储调用 mdb% cd /var/crash/testsystem % ls bounds unix.0 vmcore.0 % mdb unix.0 vmcore.0 Loading modules: [ unix kited genunix ufs_log ip SBA s1394 cc nfs ] > ::status debugging crash dump vmcore.0 (64-bit) from test system operating system: 5.10 Generic (sun4u) panic message: zero dump content: kernel pages only
当 mdb 以 > 提示符进行响应时,便可运行命令。
要检查实时系统中正在运行的内核,请按如下所示从系统提示符处运行 mdb。
示例 23-8 针对正在运行的内核调用 mdb# mdb -k Loading modules: [ unix kited genunix ufs_log ip SBA s1394 Pym cc IPX nfs ] > ::status debugging live kernel (64-bit) on test system operating system: 5.10 Generic (sun4u)