在Linux中,我可以使用echo t > /proc/sysrq-trigger
转储系统中所有线程的内核调用堆栈。
Mac OS X中是否有任何方法用于相同的目的?或者转储一个进程的内核堆栈的任何方法?
答案 0 :(得分:0)
答案可能是dtrace。我知道Instruments.app(或iprofiler)可以进行基于探测的分析,因此它需要定期的堆栈跟踪。 (用户或内核;您的选择)据我所知,这一切都基于dtrace,虽然我不太了解它能够告诉您一种一次性跟踪的方法
答案 1 :(得分:0)
嗯......我没有在Mac OS X上编写serval代码。但是一个名为' stackshot'的工具。可以帮你做到这一点。尝试谷歌它以获得使用。 : - )
答案 2 :(得分:0)
来自http://www.brendangregg.com/DTrace/DTrace-cheatsheet.pdf:
sudo dtrace -n 'fbt:::entry { stack(10); ustack(5) }'
打印10个内核框架,5个用户界面框架
答案 3 :(得分:0)
简短答案:procexp 0个线程(以root身份)将解决问题,其中procexp是http://newosxbook.com/tools/procexp.html中的“ Process Explorer”。
稍长的答案: -Dtrace是过大的,需要禁用SIP -自从删除其基础系统调用(#365)后,不推荐使用stackshot -也可以通过编程方式使用替代栈stack_snapshot_with_config(#491)(正是驱动上述工具的原因)