在运行时打印Objective-C方法

Tar*_*rek 8 objective-c

是否可以在运行时将某个类方法的实现打印/记录到控制台屏幕?我假设日志将在汇编中,我很好.

Jam*_*ter 5

您可以在行的开头添加断点,逐行执行并在调试器中调用"disassemble":

我的代码中的一行(替换了私有信息)产生了这样的结果:

-(void) method
{
    __weak typeof(self) selfReference = self; // <-- This call was disassembled.
    ...
Run Code Online (Sandbox Code Playgroud)
Project`-[Class method] + 32 at Class.m:176:
-> 0x9c5cc:  ldr    r1, [sp, #304]
0x9c5ce:  add    r0, sp, #296
0x9c5d0:  blx    0x33abec                  ; symbol stub for: objc_initWeak
0x9c5d4:  ldr    r1, [sp, #304]
Run Code Online (Sandbox Code Playgroud)

编辑

我无法验证它是否正常工作,因为我对组装不太方便,但您可以使用调试器(我正在使用的Clang)来调用它

disassemble -n methodName
Run Code Online (Sandbox Code Playgroud)

这声称

反汇编给定函数名的全部内容.

注意:我在我用来测试的方法开始时用断点做了这个

尝试创建符号断点以停止相关方法:

在此输入图像描述