2

を使用してビュー階層をデバッグしているときにexpression -o -- (NSString *)[[UIWindow keyWindow] recursiveDescription]-[UILabel length]: unrecognized selector sent to instance 0xd4ebe50. LLDB を使用して問題をデバッグし、デバッガーがunrecognized selector.

私はもう試した

  • Xcode で例外ブレークポイントを設定する
  • breakpoint set --selector lengthおよびw/ でブレークポイントを設定する
  • でブレークポイントを設定するbreakpoint set --selector -[UILabel length]

ブレークポイントを手動で設定すると、WARNING: Unable to resolve breakpoint to any actual locations.デバッグ中にブレークポイントがトリガーされないという警告が表示されます。

停止しunrecognized selectorてスタックトレースを取得することは可能ですか?

4

4 に答える 4

2

xCode では、すべての Objective-C の未処理の例外にブレークポイントを設定できます。これを行うには、ブレークポイント ナビゲーターで、ナビゲーターの左下隅にある+記号を押して、 [例外ブレークポイントの追加] を選択します。

ここに画像の説明を入力

「すべての例外」エントリが表示されます。それを右クリックして、[ブレークポイントの編集] を選択し、次のように構成します。

ここに画像の説明を入力

次に、アプリがクラッシュすると、競合コードで実行が中断され、スタック トレースと必要なすべての情報が表示されます。

それが役に立てば幸い!

于 2013-07-02T00:52:53.403 に答える
1

認識されないセレクターで停止してスタック トレースを取得することは可能ですか?

(short: ) を使用して lldb がアプリの状態呼び出しexpressionを巻き戻すのを停止します。このオプションが使用された場合、lldb は状態をクリーンアップしません。--unwind-on-error false-u false

ただし、これは、ビュー階層のどこにラベルが配置されているかをデバッグするのに役立ちませんでした。lldb は最初から、ラベルは address にあると教えてくれました0xd4ebe50。の出力はpo [0xd4ebe50 text]、調査する場所の手がかりを与えてくれました。さらに役立つように、ラベルに緑の背景を追加しました。犯人は、descriptionに関して問題を引き起こしたという名前のレーベルでした-recursiveDescription

于 2013-10-17T19:15:15.670 に答える
1

@ lucaslt89 の回答の Xcode Objective-C 例外ブレークポイントの根底にあるのは、単純な lldb ブレークポイントです。

breakpoint set --name objc_exception_throw

認識されないセレクタ エラーの場合は、 で中断することもできます-[NSObject(NSObject) doesNotRecognizeSelector:]

于 2020-07-12T19:51:11.273 に答える