プログラムをトレースする必要があります。シンボリックブレークポイントを作成しました:
完全な文字列は次のとおりです。
"Class name is @*(char*)object_getClassName(*(long*)($esp+4))@"
しかし、完全なクラス名の代わりに、コンソールには最初の 1 つのシンボルしかありません。
「クラス名は『U』です」
なんで?何か考えはありますか?
IDE: Xcode 4.6.2。LLDB。
プログラムをトレースする必要があります。シンボリックブレークポイントを作成しました:
完全な文字列は次のとおりです。
"Class name is @*(char*)object_getClassName(*(long*)($esp+4))@"
しかし、完全なクラス名の代わりに、コンソールには最初の 1 つのシンボルしかありません。
「クラス名は『U』です」
なんで?何か考えはありますか?
IDE: Xcode 4.6.2。LLDB。
*
スクリーンショットから、 の前に余分なものがあるようです(char *)
。これにより、文字列が最初の文字に逆参照されます。
更新:ログメッセージ
Class name is @(char*)object_getClassName(*(long*)($esp+4))@
lldb は C 文字列の代わりにポインター値を出力するため、意図したとおりに動作しません。回避策として、 https : //stackoverflow.com/a/12695845/1187415の方法を使用できます。
デバッガー コマンドを次のように設定します。
expr -- (void)printf("Class name is %s\n",(char *) object_getClassName(*(long*)($esp+4)))