Solaris 模块调试器指南

线程支持

MDB 提供了用于检查与目标关联的每个线程的栈和寄存器的工具。持久性 "thread" 变量包含当前代表线程的标识符。线程标识符的格式取决于目标。::regs::fpregs dcmd 可以用于检查代表线程的寄存器集或其他线程的寄存器集(如果其寄存器集当前可用)。此外,代表线程的寄存器集会作为一组命名变量导出。 用户可以通过将 > dcmd 应用于对应的命名变量来修改一个或多个寄存器的值。

MDB 内核目标会将对应的内部线程结构的虚拟地址导出作为指定线程的标识符。此地址与操作系统源代码中的 kthread_t 数据结构相对应。使用 kmdb 时,运行 kmdb 的 CPU 的 CPU 标识符会存储在 cpuid 变量中。

MDB 进程目标为检查使用本机 lwp_* 接口、/usr/lib/libthread.so/usr/lib/libpthread.so 的多线程用户进程提供了适当的支持。调试实时用户进程时,MDB 将检测单线程进程是通过 dlopen 打开还是关闭 libthread,并将自动调整其所使用的线程模型视图。 进程目标线程标识符将与代表线程的 lwpid_tthread_tpthread_t 对应,具体取决于应用程序所使用的线程模型。

如果 MDB 正在调试用户进程目标,并且目标可利用编译器支持的线程局部存储空间,则 MDB 会自动将引用线程局部存储空间的符号名称评估为对应于当前代表线程的存储空间地址。::tls 内置 dcmd 可以用于显示除代表线程之外的线程的符号值。