0

在 Linux 中,我可以echo t > /proc/sysrq-trigger用来转储系统中所有线程的内核调用堆栈。

Mac OS X 中是否有任何用于相同目的的方法?或任何方法来转储一个进程的内核堆栈?

4

4 回答 4

1

Short answer: procexp 0 threads (as root) will do the trick, where procexp is "Process Explorer" from http://newosxbook.com/tools/procexp.html .

Slightly Longer answer: - Dtrace is overkill and will need SIP disablement - stackshot is deprecated since its underlying syscall (#365) was removed - A replacement, stack_snapshot_with_config(#491) can be used programmatically as well (this is what drives the above tool)

于 2019-08-29T20:57:48.233 回答
0

答案可能是 dtrace。我知道 Instruments.app(或 iprofiler)可以进行基于探测的分析,因此它需要定期堆栈跟踪。(用户或内核;您的选择)据我所知,这一切都基于 dtrace,尽管我不太了解它,无法告诉您一种一次性跟踪的方法。

于 2016-03-22T10:08:06.907 回答
0

嗯……我已经好几年没有在 Mac OS X 上编码了。但是一个名为“stackshot”的工具可以帮助你做到这一点。尝试谷歌它以获取使用情况。:-)

于 2016-10-08T08:37:31.330 回答
0

来自http://www.brendangregg.com/DTrace/DTrace-cheatsheet.pdf

sudo dtrace -n 'fbt:::entry { stack(10); ustack(5) }'

打印 10 个内核帧,5 个用户态帧

于 2019-07-08T14:55:58.220 回答