如何使用 dtrace 跟踪函数?
Posted
技术标签:
【中文标题】如何使用 dtrace 跟踪函数?【英文标题】:How to trace a function using dtrace? 【发布时间】:2014-07-14 04:56:02 【问题描述】:我在 dhcpagent 命令中进行了一些更改,但在测试时,它有点失败。现在我知道在 dhcpagent 退出之前最终调用了哪个函数。我想跟踪从 dhcpagent 到那个特定函数的控制,比如说 foo()。我正在寻找谁调用了 foo() 以及谁调用了该函数等等,就像一个家谱,从 dhcpagent 到 foo()。我该怎么做呢 ?我对 dtrace 有非常基本的了解,例如如何构建基本脚本,但仅此而已。您能否推荐一个脚本/资源,让我可以自己学习和编写脚本?
我做了什么尝试:
pid$target::functionname:entry //and the target was dhcpagent from the command line
谢谢
【问题讨论】:
试试这个。 joyent.com/blog/bruning-questions-debugging 【参考方案1】:我认为以下脚本可以帮助您:
#!/usr/sbin/dtrace -Fs
pid$target:::entry,
pid$target:::return
在上面的脚本中,它可以打印出函数是如何被调用的。但是输出可能非常大!
如果你只关心dhcpagent
模块,我认为下面的脚本是一个更好的选择:
#!/usr/sbin/dtrace -Fs
pid$target:dhcpagent::entry,
pid$target:dhcpagent::return
【讨论】:
以上是关于如何使用 dtrace 跟踪函数?的主要内容,如果未能解决你的问题,请参考以下文章