2013-03-06 9 views
6

現在、XCodeでデバッグに問題があります。すべてのスタックトレースには最後の2回のコールしか表示されません。 lldbコンソールも使用できません。例えば、単純なunrecognized selectorエラーは、このトレースは、単純なXCodeの再起動は、問題を解決しLLDBスタックトレースは、Xcodeの最後の2回のコールしか表示しません。

* thread #1: tid = 0x2503, 0x32d2e960 libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 1.1 
    frame #0: 0x32d2e960 libobjc.A.dylib`objc_exception_throw 
    frame #1: 0x37c4ae06 CoreFoundation`-[NSObject(NSObject) doesNotRecognizeSelector:] + 170 
+0

私は同じ問題を抱えています...私はMac OS X 10.7を使用しています。すでにmdimportを行っています。すべてのシンボルフォルダにあります。あなたはこれを解決しましたか? –

答えて

6

[NSThread callStackSymbols]をデバッガから印刷してみてください。デバッガが表示されない場合は時々動作します。

さらに、私の経験では、GDBははるかに信頼性が高いということです。

+0

gdb(と 'callStackSymbols')はまっすぐなスタックウォークを行います。 lldbは、レジスタの保存方法とスタックの操作方法を決定するために、メソッドの命令を検査します。腕の上のlldbスタックウォークは昨年改良されましたが、Obj-Cの手最適化されたディスパッチルーチンは正しく静的に解析するのが非常に難しいです。 gdbと 'callStackSymbols'によって使われる単純なフォロー・フレーム・チェイン・アルゴリズムは、他のケースでも失敗し、これらはどちらも正しく動作しません。スタックの巻き戻しはかなり難しいことがあります。 –

+0

@JasonMolenda GDBは素朴なスタックウォークをしていないと確信しています。たいていは、 '+ callStackSymbols'が動作するバックトレースを与えられません。 –

+0

素敵なトリック。ありがとう!しかし、あまりにも厄介な修正があったことを願っています。 :( – Kalle

5

ログを示しています。しかし、このバグはしばらくしてから起きています。私はこれについてのバグを報告します。

+0

シンプルだが効果的。ありがとうございました!私も同じ問題がありました。デバッガは最後の2つのスタックトレース要素のみを表示します。呼び出しはすべて単純な静的メソッド呼び出しでした。 xcodeを再起動すると解決しました。 –

0

Objective-Cランタイム関数を使用して巻き戻すことは、腕にとっては厄介なことがありますが、アセンブリは手作業で調整され、lldbは過去の巻き戻し方法を理解するのに問題があります。このケースでは、1つのフレームが遠くになってから、それ以上遠くに出ることができないように見えます。

関連する問題