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

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.)

于 2013-05-02T19:35:47.370 に答える