1

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

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

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

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

我认为 OS X 使用的是 64 位寄存器。所以这个命令不起作用(确实,它不起作用)。我应该如何编写这个命令?或者有一种简单的方法可以做到这一点?只是跟踪调用的类和方法

4

1 回答 1

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 架构。(当然,pexpr --这里的别名——同样的事情,只是少了打字。)

于 2013-05-02T19:35:47.370 回答