0

Xcode4.3.2の使用。私はこれを含む多くの異なる同様の問題を見ました

no-call-stack-on-exception-in-xcode-4

ただし、デバッガー(gdbまたはlldb)を取得して、例外の場所を示す適切なスタックトレースを取得し、例外が何であるかを出力することはできません。

シンボリック例外objc_exception_throwまたは「すべての例外」例外ブレークポイントのいずれかを設定すると、lldbは適切なスタックトレースを提供しませんが、次のように表示されます。

  • スレッド#1:tid = 0x1c03、0x34455238 libobjc.A.dylib objc_exception_throw, stop reason = breakpoint 1.1 frame #0: 0x34455238 libobjc.A.dylibobjc_exception_throwフレーム#1:0x323ff788 CoreFoundation` + [NSException raise:format:arguments:] + 100

これがbt、グラフィカルなブレークポイント/デバッガービューでの全倍率または全倍率でのすべてです。

この時点で続行を数回押すと、最終的には例外/アサーションが表示されます。たとえば、

***キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています、理由:'_endUndoGroupRemovingIfEmpty :: NSUndoManager 0x2b7610が無効な状態であり、endUndoGroupingが一致せずに呼び出されました

しかし、それがどこにあるのかわかりません。

gdbは、同じブレークポイントを使用して、停止して現在の場所を表示しますが、例外テキストを出力しません。数回続行を押すと、それは実行されますが、バックトレースのコンテキストが失われます。

例外テキストを印刷する方法を知りたいので、何回か続けて場所を失うことなく、なぜ停止したのかを知ることができます。また、gdbの場合と同様に、例外の時点でlldbで停止させたいと思います。

4

1 に答える 1

1

Xcode4.5にアップデートしてみてください。lldbがスタックを完全にアンワインドする方法を知らないarmv7アンワインダーの問題が発生しています。Objective-Cランタイムには、元に戻すのが難しい機能(手書きのアセンブリ)がいくつかありますが、Xcode 4.5を使用してiOSデバイスで簡単なテストを行ったところ、Xcodeにスロー時に例外ブレークポイントを設定したときにlldbが正しく動作しました。

于 2012-09-29T06:12:13.053 に答える