iOSガイドシリーズ:クラッシュの問題を解決する方法-詳細なデバッグ


変換元:http://blog.csdn.net/gnicky/article/details/7461574
 
iOSガイドシリーズ:クラッシュの問題を解決する方法-詳細なデバッグ
分類:iOS
2012-04-14 21:52 
765人が読む
コメント(0)
コレクション
通報する
(lldb) po $eax
(unsigned int) $1 = 112518480 Receiver () has no segue with identifier 'ModalSegue'
上がってすぐにこの2行のものを見て、少し役に立つと思っているのではないでしょうか.しかし、わけがわからないのではないでしょうか.
デバッガと友達になるMaking Friends With the Debugger
最近のcrashポイントでは、コードは次のとおりです.
	[self performSegueWithIdentifier:@"ModalSegue" sender:sender];

デバッグペインにはメッセージがありません.以前のように、「プログラムの実行を続行」ボタンを押すこともできますが、デバッガにコマンドを入力してエラー情報を得ることもできます.これにより、同じ場所でアプリケーションを一時停止することができます.このシミュレータを実行する場合は、(lldb)プロンプトに次のように入力できます.
(lldb) po $eax

LLDB is the default debugger for Xcode 4.3 and up. 
古いバージョンのXcodeを使用している場合は、GDBデバッガがあります(linux開発者にはよく知られています).彼らは同じ基本的なコマンドを採用しているので、Xcodeのヒントが(lldbではなく)あれば、このコマンドに従って問題ないはずです.(ちなみに、Xcodeエディタ間の異なるデバッグを切り替えることができます.プロジェクトschema編集オプションでdebuggerを選択し、ローカルの図で問題を説明することができます.)
iOS指南系列:如何解决奔溃问题-深入调试_第1张图片
Poコマンドは、「印刷オブジェクト」print objectを表します(.net clr debugの!do!pe=print exceptionを思い出すことはありません).符号$EAXとは、CPUレジスタの1つである.例外の場合、このレジスタにはポインタのNSExceptionオブジェクトが含まれます.注意:$EAXはシミュレータにのみ適用されます.デバイスをデバッグしている場合は、レジスタ$R 0を使用する必要があります.たとえば、次のように入力します.
(lldb) po [$eax class]

次のような出力も見られます
(id) $2 = 0x01446e84 NSException

数字は重要ではありませんが、NSExceptionオブジェクトとここで処理していることは明らかです.このオブジェクトからNSExceptionメソッドを呼び出すことができます.例:
(lldb) po [$eax name]

これはあなたに異常な名前を与えます.この場合NSInvalidArgumentExceptionでは、
(lldb) po [$eax reason]

これはあなたにerror messageをあげます.
(unsigned int) $4 = 114784400 Receiver (<MainViewController: 0x6b60620>) has no
segue with identifier 'ModalSegue'

Note: When you just do “po $eax”, it will call the “description” method on the object and print that, which in this case also gives you the error message.
これはどういうことかを説明します.「ModalSegue」というSegueを実行しようとしましたが、MainViewControllerにはSegue社がないのは明らかです.storyboardは、Segue社が存在することを示していません.識別子を設定するのを忘れたのです.これは非典型的なエラーです(スペルが間違っていることが多い):
iOS指南系列:如何解决奔溃问题-深入调试_第2张图片
Segueの識別子「ModalSegue」を変更します.プログラムを再実行します.-待機-ポイント選択ボタン.わあ、今回はもう崩れてない!しかし、ここでは私たちの次の問題です.表示テーブルは空ではないと思います.
Why?
翻訳者は慣例に従ってまとめます.
1.storayboardを適用した後、その設定に特に注意する
2.gdb/lldbデバッグコマンドを理解するのは本当に役に立ちます(もちろんwindows debuggerを理解するのも役に立ちます:))
ここにはいくつかあります.
http://blog.csdn.net/gnicky/article/details/7459238