【问题标题】:How to print kernel call stack in Mac OS X如何在 Mac OS X 中打印内核调用堆栈
【发布时间】:2019-08-30 04:57:48
【问题描述】:

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

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

【问题讨论】:

    标签: macos kernel xnu


    【解决方案1】:

    简答:procexp 0 个线程(以 root 身份)可以解决问题,其中 procexp 是来自 http://newosxbook.com/tools/procexp.html 的“进程资源管理器”。

    略长的答案: - Dtrace 太过分了,需要禁用 SIP - stackshot 已被弃用,因为它的底层系统调用 (#365) 已被删除 - 替代品 stack_snapshot_with_config(#491) 也可以通过编程方式使用(这是驱动上述工具的原因)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          打印 10 个内核框架、5 个用户级框架

          【讨论】:

            猜你喜欢
            • 2015-08-25
            • 2011-07-05
            • 1970-01-01
            • 2014-02-04
            • 1970-01-01
            • 2012-04-29
            • 1970-01-01
            • 2010-11-28
            相关资源
            最近更新 更多