捕获所有Objective-C消息并获取Cocoa运行时中的对象列表

Ser*_*nko 2 cocoa objective-c

我需要捕获并记录Cocoa应用程序中对象发出的所有消息.而且我还需要运行时对象实例列表.它有可能吗?

Yuj*_*uji 8

使用dtrace,它已经内置到系统中.请参阅MacTech上的这篇精彩的介绍性文章.

Dtrace是一个系统范围的标准机制,以便您可以记录活动.各种系统API通知内核,即每个系统调用,每个objc_msgSend等都生成一个可跟踪点,您可以将dtrace脚本传递给内核来记录这些活动.它非常强大.

作为练习,请将以下内容放入一个名为objc.d:

objc$target:::entry
{
    printf("[%s %s]\n", probemod,probefunc);
}
Run Code Online (Sandbox Code Playgroud)

然后从命令行运行

$ sudo dtrace -q -s objc.d -p 3333
Run Code Online (Sandbox Code Playgroud)

其中3333应该是一些Cocoa app的pid.您将获得发送到任何对象的每条消息的日志!真厉害!