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