1. 获取进程树
> ::ptree
fffffffffc04b6b0 sched
ffffc10011da9fc0 postwaittq
ffffc10011da1fc0 vmtasks
ffffc10011d1dfc0 intrd
ffffc10011d1afc0 fsflush
ffffc10011d15fc0 pageout
ffffc10011d12fc0 init
ffffc100616d1fc0 asr-notify
ffffc1006166afc0 devchassisd
ffffc100616a5fc0 smtp-notify
ffffc10029dd2fc0 fmd
ffffc1004b4a0fc0 nmz
ffffc1002a276fc0 vtdaemon
ffffc1002a0e2fc0 sendmail
ffffc1002a108fc0 sendmail
ffffc10029d3dfc0 auditd
ffffc100294fffc0 syslogd
ffffc10029249fc0 sshd
ffffc109b7156fc0 sshd
ffffc109b715bfc0 sshd
ffffc109b9f73fc0 bash
ffffc109b9fdbfc0 format
2. 找到对应进程的所有线程
> ffffc109b9fdbfc0::walk thread
ffffc10014cb48e0
ffffc100152f12c0
ffffc100152ec520
ffffc10015173dc0
>
3.找到线程的栈信息
> ffffc10015173dc0::findstack -v
stack pointer for thread ffffc10015173dc0: fffffffc811d0c60
[ fffffffc811d0c60 _resume_from_idle+0x12e() ]
fffffffc811d0c90 swtch+0x1fb()
fffffffc811d0cf0 cv_wait_sig_swap_core+0x16f(ffffc1002bf12c82, ffffc1002bf12c48, 0)
fffffffc811d0d10 cv_wait_sig_swap+0x18(ffffc1002bf12c82, ffffc1002bf12c48)
fffffffc811d0d80 cv_waituntil_sig+0x135(ffffc1002bf12c82, ffffc1002bf12c48, 0, 0)
fffffffc811d0e60 poll_common+0x4c7(7ff5cdbefe88, 1, 0, 0)
fffffffc811d0ef0 pollsys+0xe8(7ff5cdbefe88, 1, 0, 0)
fffffffc811d0f00 sys_syscall+0x281()
>
4.找到某个driver的所有栈,用于调试Hung,例如SD driver
> ::stacks -m sd
THREAD STATE SOBJ COUNT
fffffffc80d54bc0 SLEEP SEMA 1
swtch+0x146
sema_p+0x1d6
biowait+0x7a
scsi_uscsi_handle_cmdf+0x22b
scsi_uscsi_handle_cmd+0x2b
sd_ssc_send+0x295
sd_send_scsi_TEST_UNIT_READY+0x111
sdpower+0x502
pm_power+0x64
pm_default_ctlops+0xd6
pm_ctlops+0x4c
power_dev+0x142
pm_busop_set_power+0x4fa
pm_set_power+0x135
dev_is_needed+0x87
pm_raise_power+0x77
sd_pm_entry+0xe3
sd_pm_iostart+0x2a
sd_uscsi_strategy+0x12a
default_physio+0x333
physio+0x25
scsi_uscsi_handle_cmdf+0x2b4
[...]