【问题标题】:DTrace on Leopard: No probes specified, even when I specify probesLeopard 上的 DTrace:没有指定探针,即使我指定了探针
【发布时间】: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 认为我没有指定任何探针?

【问题讨论】:

    标签: objective-c cocoa macos 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
      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多