编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

使用 mdb 模块调试器

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

  • 实时操作系统组件

  • 操作系统故障转储

  • 用户进程

  • 用户进程核心转储

  • 目标文件

mdb 调试器可为分析内核问题提供复杂的调试支持。本节概述了 mdb 功能。有关 mdb 的完整讨论,请参阅Oracle Solaris Modular Debugger Guide

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


注 - mdb 的提示符为 >

模块调试器入门

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


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

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)