Solaris 模块调试器指南

dcmd

thread ::allocdby

在指定内核线程的地址的情况下,按反向时间顺序列显其已执行的内存分配的列表。

bufctl ::bufctl [-a address] [-c caller] [-e earliest] [-l latest] [-t thread]

列显指定的 bufctl addressbufctl 信息摘要。 如果存在一个或多个选项,则仅当 bufctl 与选项参数所定义的条件匹配时才会列显其信息;这样,可将 dcmd 用作来自管道的输入的过滤器。 -a 选项表示 bufctl 的对应缓冲区地址必须等于指定的地址。 -c 选项表示指定的调用方的程序计数器值必须存在于 bufctl 的已保存栈跟踪中。 -e 选项表示 bufctl 的时间标记必须晚于或等于指定的最早时间标记。 -l 选项表示 bufctl 的时间标记必须早于或等于指定的最早时间标记。 -t 选项表示 bufctl 的线程指针必须等于指定的线程地址。

[ address ] ::findleaks [-v]

对于启用了完整 kmem 调试功能集的内核崩溃转储,::findleaks dcmd 提供了强大高效的内存泄漏检测。 首次执行 ::findleaks 时会处理内存泄漏的转储(这可能需要几分钟),然后按分配栈跟踪合并泄漏。 findleaks 报告显示了所识别的每个内存泄漏的 bufctl 地址和最顶层的栈帧。

如果指定了 -v 选项,则 dcmd 在执行时会列显更详细的消息。 如果在 dcmd 前面指定了显式地址,则将过滤报告,并仅显示其分配栈跟踪包含指定函数地址的泄漏。

thread ::freedby

在指定内核线程的地址的情况下,按反向时间顺序列显其已执行的内存释放的列表。

value ::kgrep

在内核地址空间中搜索包含指定的指针大小值的指针对齐地址。 然后,列显包含匹配值的地址的列表。与 MDB 的内置搜索运算符不同,::kgrep 可搜索每段内核地址空间,并跨不连续的段边界搜索。 在大内核上,执行 ::kgrep 可能需要相当长的时间。

::kmalog [ slab | fail ]

显示内核内存分配器的事务日志中的事件。 事件按反向时间顺序显示,首先显示最新的事件。对于每个事件,::kmalog 都显示相对于最新事件的时间(用 T-差值表示法表示,例如 T-0.000151879)、bufctl、缓冲区地址、kmem 高速缓存名称和事件发生时的栈跟踪。 如果没有参数,则 ::kmalog 将显示 kmem 事务日志(仅当 kmem_flags 中设置 KMF_AUDIT 时它才存在)。::kmalog fail 显示分配失败日志,该日志会始终存在;这有助于调试未正确处理分配失败的驱动程序。::kmalog slab 显示长字节创建日志,该日志会始终存在。::kmalog slab 有助于搜索内存泄漏。

::kmastat

显示内核内存分配器高速缓存和虚拟内存块 (arena) 的列表,以及对应的统计信息。

::kmausers [-ef] [cache ...]

列显有关具有当前内存分配的内核内存分配器的中等用户和大用户的信息。对于每个唯一的栈跟踪,输出都包含一个项,用于指定总内存量和在该栈跟踪中进行的分配数。此 dcmd 要求在 kmem_flags 中设置 KMF_AUDIT 标志。

如果指定了一个或多个高速缓存名称(例如 kmem_alloc_256),则对内存使用情况的扫描仅限于那些高速缓存。 缺省情况下,包括所有高速缓存。 如果使用了 -e 选项,则包括分配器的小用户。 小用户是总数小于 1024 字节内存的分配或者同一栈跟踪中的分配数小于 10 的分配。 如果使用了 -f 选项,则会针对每个单独的分配列显栈跟踪。

[ address ] ::kmem_cache

对指定地址上存储的 kmem_cache 结构或完整的活动 kmem_cache 结构集进行格式设置和显示。

::kmem_log

显示完整的 kmem 事务日志集(按反向时间顺序排列)。 此 dcmd 使用比 ::kmalog 更简明的表格输出格式。

[ address ] ::kmem_verify

验证在指定地址上存储的 kmem_cache 结构或完整的活动 kmem_cache 结构集的完整性。如果指定了显式高速缓存地址,则 dcmd 会显示有关错误的详细信息;否则,显示摘要报告。内核内存高速缓存中对 ::kmem_verify dcmd 进行了更详细的讨论。

[ address ] ::vmem

对在指定地址上存储的 vmem 结构或完整的活动 vmem 结构集进行格式设置和显示。此结构在 <sys/vmem_impl.h> 中定义。

address ::vmem_seg

对在指定地址上存储的 vmem_seg 结构进行格式设置和显示。此结构在 <sys/vmem_impl.h> 中定义。

address ::whatis [-abv]

报告有关指定地址的信息。 具体来说,::whatis 会尝试确定该地址是指向 kmem 管理的缓冲区的指针还是其他类型的特殊内存区域(如线程栈),然后报告其判定结果。 如果存在 -a 选项,则 dcmd 会向其查询报告所有匹配项,而不仅仅是第一个匹配项。 如果存在 -b 选项,则 dcmd 还会尝试确定该地址是否通过已知的 kmem bufctl 被引用。 如果存在 -v 选项,则 dcmd 在搜索各种内核数据结构时会报告其进度。