Leopard 上的 DTrace:没有指定探针,即使我指定了探针

Posted

技术标签:

【中文标题】Leopard 上的 DTrace:没有指定探针,即使我指定了探针【英文标题】:DTrace on Leopard: No probes specified, even when I specify probes 【发布时间】:2009-07-28 21:18:46 【问题描述】:
% sudo dtrace -p 2446 'objc$target:NSObject:-init:entry  trace(); '
dtrace: no probes specified

The manpage 建议这是在 Objective-C 方法上指定探测的正确格式。我试过 -Z,但(不出所料)它什么也没打印。

[已添加] 它甚至不特定于 Objective-C 探针。我使用 AppKit 中的 C 函数进行了尝试:

sudo dtrace -p 2446 'pid$target::NSPopAutoreleasePool:entry  trace(); '
dtrace: no probes specified

那怎么了?为什么 DTrace 认为我没有指定任何探针?

【问题讨论】:

【参考方案1】:

我想你的意思是:

sudo dtrace -p 2446 -n 'objc$target:NSObject:-init:entry  trace(); '

【讨论】:

【参考方案2】:

除了 Graham 所说的之外,您的原始语句只会找到 NSObject 的实例,而不是它的后代。你可以试试

sudo dtrace -p 2446 -n 'objc$target::-init*:entry '

通过所有 NSObject 派生实例捕获所有 -init 变体。

【讨论】:

它不会通过子类捕获[super init] 消息? 我不这么认为。我的印象是模块总是设置为实例的类,即使它通过 super 调用方法也是如此。我只是尝试了使用 NSObject 而不是空白模块建议的命令行,但没有匹配的探针,而在我尝试的应用程序上,模块的命中率约为 3400。【参考方案3】:

有问题的进程是否允许 dtrace?苹果doesn't always allow dtrace on os x。

【讨论】:

据我所知,是的。这是我开发的开源应用程序,不是 Apple 开发的任何东西,而且我不知道 zsh 在我自己的进程中设置了 P_LNOATTACH

以上是关于Leopard 上的 DTrace:没有指定探针,即使我指定了探针的主要内容,如果未能解决你的问题,请参考以下文章

从 C 程序访问 dtrace 探针

Dtrace 无效的探针说明符错误

DTrace - 如何在返回探针中正确检索初始参数

请问dtrace启用了哪些探针?

在 C++ 中使用 Dtrace 设置我自己的探针

DTrace END 探针从不触发