显示内核空间中的远程线程的回溯

在内核空间中进行调试时,我有时希望根据线程组中的回溯帧搜索线程,如特定任务上的所有线程。显示内核空间中的远程线程的回溯

例如,获取kernel_task ID

(lldb) showalltasks 

task vm_map ...command

0xffffff800d828550 0xffffff800a1038d8 ...kernel_task

转储全部线程属于kernel_task

(lldb) showtaskthreads 0xffffff800d828550 

task vm_map ipc_space #acts flags pid process io_policy wq_state command

0xffffff800d828550 0xffffff800a1038d8 0xffffff800d5d17c0 140 0 0xffffff8007abb460 -1 -1 -1 kernel_task

thread thread_id processor base pri sched_mode io_policy state ast waitq wait_event wmesg thread_name

0xffffff8007acf098 0x65 0xffffff8007a8a7b8 92 92 fixed bound WU L 0xffffff804119e550 0xffffff8007a87a30 <vm_page_free_wanted>

0xffffff800d83f4c0 0x66 0xffffff8007a8a7b8 0 0 fixed bound RI L

0xffffff800d83f958 0x67 0xffffff8041ad6000 95 95 fixed WU L 0xffffff804119c240 0xffffff8007303840 <sched_timeshare_maintenance_continue> sched_maintenance_thread

0xffffff800d83fdf0 0x68 0xffffff8041ad6000 80 80 fixed WU L 0xffffff804119e850 0xffffff8007acf9f0

0xffffff800d83f028 0x69 0xffffff8007a8a7b8 93 93 fixed WU 0xffffff804119e5e0 0xffffff8007acfa08

现在我可以看到线程ID和其他许多有关线程,但我怎么能观察线程的回溯?

回答:

无论出于何种原因,xnu内核调试宏在讨论线程时都使用“线程”和“激活”(缩写为“act”)术语。有了这些信息,你很快就会发现:

showactstack <activation>

哪里<activation>是线程地址(指针值,而不是ID),所以如showactstack 0xffffff8007acf098

还要注意以下有用命令:

showtaskstacks <task address> 

showtaskstacks -F <taskname>

这些数据显示所有对应于任务/进程的堆栈。

showallstacks 

这将打印为系统中的所有线程的内核堆栈。被警告:这可能需要一段时间才能完成。 (IIRC在Firewire上比在以太网kdp上更快,但仍需要几分钟时间。)

以上是 显示内核空间中的远程线程的回溯 的全部内容, 来源链接: utcz.com/qa/265274.html

回到顶部