[解決済み] Xcode/LLDB: 投与されたばかりの例外に関する情報を取得するには?
質問
では、私のブレークポイントである
objc_exception_throw
にあるブレークポイントがちょうどトリガーされたとします。 私はデバッガーのプロンプトに座っていて、例外オブジェクトに関するいくつかの詳細な情報を取得したいと思います。例外オブジェクトの情報はどこにあるのでしょうか?
どのように解決するのですか?
例外オブジェクトは、第一引数として
objc_exception_throw
. LLDB では
$arg1
..
$argn
という変数を使って、正しい呼び出し方法で引数を参照することで、例外の詳細を簡単に表示することができます。
(lldb) po $arg1
(lldb) po [$arg1 name]
(lldb) po [$arg1 reason]
を必ず選択してください。
objc_exception_throw
フレームを選択していることを確認してください。ステージでこれを実行する様子を見るには、WWDC15 セッションのビデオにある "Advanced Debugging and the Address Sanitizer" を参照してください。
古い情報
GDB を使用している場合、第1引数を参照する構文は、実行しているアーキテクチャの呼び出し規約に依存します。 実際の iOS デバイスでデバッグしている場合、オブジェクトへのポインタはレジスタ
r0
. これを印刷したり、メッセージを送ったりするには、次のような簡単な構文を使います。
(gdb) po $r0
(gdb) po [$r0 name]
(gdb) po [$r0 reason]
iPhone Simulatorでは、関数の引数はすべてスタックに渡されるため、構文はかなり恐ろしいものになります。私が組み立てた最も短い式は、次のとおりです。
*(id *)($ebp + 8)
. 苦痛を少なくするために、私は便利な変数を使用することをお勧めします。
(gdb) set $exception = *(id *)($ebp + 8)
(gdb) po $exception
(gdb) po [$exception name]
(gdb) po [$exception reason]
また
$exception
にコマンドリストを追加することで、ブレークポイントが発生するたびに自動的に
objc_exception_throw
を追加することで、ブレークポイントが発生するたびに自動的に
(私がテストしたすべてのケースで、例外オブジェクトは
eax
と
edx
はブレークポイントがヒットした時に登録されます。常にそうなるとは限りませんが)。
下のコメントから追加。
で
lldb
のスタックフレームを選択します。
objc_exception_throw
を選択し、このコマンドを入力します。
(lldb) po *(id *)($esp + 4)
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] Objective-Cで乱数を発生させる
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] 残念ながらMyAppは停止してしまいました。どうすればよいですか?
-
[解決済み】iOSアプリの名前を変更する方法は?
-
[解決済み] カレントスレッドがメインスレッドであるかどうかをチェックする
-
[解決済み] Swift の外部読み取り専用、内部読み書き可能なプロパティ
-
[解決済み] iOS 6 の補完ブロックの dispatch_get_current_queue() の代わりとなるものは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-C の boolean の書式設定文字列?
-
[解決済み] 2つの日付の差を計算するにはどうすればよいですか?
-
[解決済み] iOSのBackground Threadの起動
-
[解決済み] インスタンスメッセージの受信型'CALayer'は前方宣言である」とはどういう意味か?
-
[解決済み] objective-cでNSURLの一部を取得する
-
[解決済み] Objective-Cでオブジェクトをコピーする方法
-
[解決済み] Objective-Cで`oneway void`の使用例?
-
[解決済み] NSTimeInterval(秒)を分単位に変換する方法
-
[解決済み] MKMapViewのアノテーションをすべて削除する方法
-
[解決済み] NSStringをstd::stringに変換するにはどうしたらいいですか?