I'm tracing a OS X application, I hope can find a way like this way on iOS:
lldb Xcode: error: 'printf' is not a valid command
Is there a way to do like this? I tried
expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8) )
I think OS X is used 64bit registers. So this command cann't work(Indeed, it doesn't work). How should I write this command? Or there is a simple way to do the same? Just tracing the class and method called
The command you quote above is only correct for iOS Simulator apps which run as i386 processes on the Mac. $esp+4
means the first argument, $esp+8
means the second argument passed in the i386 ABI. On x86_64 and arm, the first few arguments are passed in registers with the $arg1
, $arg2
convenience names. So try
p (void)printf("[%s, %s]\n", (char*)object_getClassName($arg1), $arg2)
for arm/x86_64 architectures. (of course, p
is an alias for expr --
here - same thing, just less typing.)
来源:https://stackoverflow.com/questions/16334144/lldb-objc-msgsend-tracing-on-os-x