编写设备驱动程序

使用 mdb 模块调试程序

mdb(1) 模块调试程序可以应用于以下文件类型:

mdb 调试程序可为分析内核问题提供复杂的调试支持。本节概述 mdb 功能。有关 mdb 的完整讨论,请参阅《Solaris 模块调试器指南》

尽管 mdb 可用来改变实时内核状态,但 mdb 缺少 kmdb 提供的内核执行控制。因此,kmdb 是进行运行时调试的首选调试程序,而 mdb 调试程序更多用于静态情况。


注 –

mdb 的提示符为 >


模块调试程序入门

mdb 为实现调试程序模块提供了大量编程 API,从而使驱动程序开发者可以实现自定义调试支持。mdb 调试程序还提供了许多可用功能,如命令行编辑、命令历史记录、输出页面调度程序和联机帮助。


注 –

不应再使用 adb 宏。该功能已被 mdb 中的 dcmd 替代。


mdb 调试程序提供了一组丰富的模块和 dcmd。借助这些工具,可以调试 Solaris 内核、任何关联的模块以及设备驱动程序。通过这些功能可以执行一些任务,如:

首先切换到崩溃目录,键入 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)