如何在Mac OS X上使用DTrace在没有系统方法或系统框架的情况下进行检测?

发布于 2024-12-01 01:41:16 字数 280 浏览 0 评论 0原文

如何使用 DTrace 打印用户定义的类和方法,而不使用系统类、方法比如NSLock、NSThread、NSObject等等?

使用以下D代码,它可以跟踪所有Objective-C方法,包括系统和用户定义的方法:

objc$target:::entry
{
    printf("%s %s\n", probemod, probefunc);
}

How do I just print the user-defined class and method using DTrace, without the system class, method, such as NSLock, NSThread, NSObject and so on?

Using the following D code, it can trace all of the Objective-C methods including the system and user-defined:

objc$target:::entry
{
    printf("%s %s\n", probemod, probefunc);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初与友歌 2024-12-08 01:41:16

DTrace 仅了解内核和用户空间。它不知道哪些库是系统的一部分,哪些不是。

如果您遵循 Cocoa 约定并正确为所有类添加前缀,那么您可以在探针名称中指定前缀。例如,如果您的前缀是 VIC

objc$target:VIC*::entry
{
   printf("%s %s\n", probemod, probefunc);
}

仅当传递的类以 VIC 为前缀时,才会触发这些探测器。

DTrace knows only about kernel and user spaces. It knows nothing about what libraries are part of system and what don't.

If you follow Cocoa conventions and properly prefix all you classes then you can specify the prefix in the name of probe. E.g. if your prefix is VIC:

objc$target:VIC*::entry
{
   printf("%s %s\n", probemod, probefunc);
}

These probe will be fired only if the passed class prefixed with VIC.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文