1

プログラムをトレースする必要があります。シンボリックブレークポイントを作成しました:

ここに画像の説明を入力

完全な文字列は次のとおりです。

"Class name is @*(char*)object_getClassName(*(long*)($esp+4))@"

しかし、完全なクラス名の代わりに、コンソールには最初の 1 つのシンボルしかありません。

「クラス名は『U』です」

なんで?何か考えはありますか?

IDE: Xcode 4.6.2。LLDB。

4

1 に答える 1

2

*スクリーンショットから、 の前に余分なものがあるようです(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)))
    
于 2013-05-21T04:36:00.847 に答える