lldb objc_msg在OS X上发送跟踪

Kev*_*Lee 1 debugging macos lldb

我正在追踪一个OS X应用程序,我希望可以在iOS上找到这样的方式:

lldb Xcode:错误:'printf'不是有效命令

有办法这样做吗?我试过了

expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8) )
Run Code Online (Sandbox Code Playgroud)

我认为OS X使用的是64位寄存器.所以这个命令不起作用(实际上,它不起作用).我该怎么写这个命令?或者有一个简单的方法来做同样的事情?只是跟踪调用的类和方法

Jas*_*nda 8

您在上面引用的命令仅适用于在Mac上作为i386进程运行的iOS模拟器应用程序. $esp+4表示第一个参数,$esp+8表示在i386 ABI中传递的第二个参数.在x86_64和手臂,前几个参数都与寄存器传递$arg1,$arg2方便的名字.所以试试吧

p (void)printf("[%s, %s]\n", (char*)object_getClassName($arg1), $arg2)
Run Code Online (Sandbox Code Playgroud)

用于arm/x86_64体系结构.(当然,这里p是别名expr --- 同样的事情,只是少打字.)