首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OSX / DTrace中的函数边界跟踪

OSX / DTrace中的函数边界跟踪
EN

Stack Overflow用户
提问于 2016-03-20 05:55:34
回答 1查看 297关注 0票数 2

我很难在OSX 10.11.3中使用dtrace (或dapptrace)跟踪所有函数。

从dtrace上的this page (日期为2006年)看,这个简单的脚本对于跟踪函数的进入和退出应该很有用:

代码语言:javascript
复制
pid$1::$2:entry
{
    self->trace = 1;
}

pid$1::$2:return
/self->trace/
{
    self->trace = 0;
}

pid$1:::entry,
pid$1:::return
/self->trace/
{
}

我如何才能对一个生命周期较短的程序运行它,比如hello world to start?我早就猜到了:

代码语言:javascript
复制
➜ sudo dtrace -s userfunc.d

dtrace: failed to compile script userfunc.d: line 1: invalid probe description "pid$1::$2:entry": Undefined macro variable in probe description
➜ sudo dtrace -s userfunc.d -c a.out

dtrace: failed to execute a.out: file is set-id or unreadable [Note: the '-c' option requires a full pathname to the file]

➜ sudo dtrace -s userfunc.d -c `pwd`/a.out

dtrace: failed to compile script userfunc.d: line 1: invalid probe description "pid$1::$2:entry": Undefined macro variable in probe description
➜ sudo dtrace -s userfunc.d -c `pwd`/a.out execute

dtrace: failed to compile script userfunc.d: line 1: invalid probe description "pid$1::$2:entry": Undefined macro variable in probe description

如果我将对libc.so的引用更改为libsystem_c.dylib,则跟踪libc的第二个示例可以工作。

看起来dapptrace也失败了。

代码语言:javascript
复制
➜ sudo dapptrace ./a.out
dtrace: invalid probe specifier
...
: probe description pid16290:a.out::entry does not match any probes

添加-U会打印一大堆垃圾,甚至不确定它是否有用(我没有看到我对puts的调用,也没有看到任何fprintf或write)。

现在我知道DTrace,特别是dtruss在OSX中绝对没有被破坏。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-08-05 17:19:36

可能太晚了,但主要问题似乎是您没有正确指定$1 arg:

$1宏变量扩展到命令行上的第一个操作数。这个宏变量是要跟踪的进程的进程ID。

如果使用-c,那么可以使用pid$target代替pid$1,它会自动使用衍生进程的PID。

至于dapptrace,它似乎在OS中有一个问题:您必须在dapptrace脚本内的dtrace调用中添加一个-Z (第258行)。https://www.mail-archive.com/dtrace-discuss%40opensolaris.org/msg03808.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36107673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档