lldb objc_msg在OS X上发送跟踪

时间:2013-05-02 09:04:59

标签: macos debugging lldb

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

lldb Xcode: error: 'printf' is not a valid command

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

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

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

的类和方法

1 个答案:

答案 0 :(得分:8)

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

p (void)printf("[%s, %s]\n", (char*)object_getClassName($arg1), $arg2)

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