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:没有指定探针,即使我指定了探针的主要内容,如果未能解决你的问题,请参考以下文章