2011-07-27 14 views
1

私はクラス定義内にブレークポイントを作成しようとしましたが、オブジェクトインスタンスに送信されたメッセージで停止し、クラスコードにジャンプして行ごとに歩き回り、ローカル変数。オブジェクトのインスタンスでブレークポイントを停止することはできますか?

「いいえ、これはできないはずです」、メモリにクラスのインスタンスが複数存在する可能性があるので、ここで取り組みます。誰かがより良い説明をすることができれば、それは壮大になるでしょう。あなたはこのような何かを話していると仮定すると、

(注意点として、私の代替は、ランタイムデータの過度のNSLoggingである。)

答えて

3

はい、可能です!あなたは、ブレークポイントに条件を追加することができます。条件が満たされたとき

http://d.pr/yZVB+ http://d.pr/pWOB+

プログラムは、このブレークポイントで一時停止します。あなたはself == _myGlobalInstanceOfInterestのような条件を選ぶことができます。

インスタンスを変数に格納したくない場合は、たとえば条件なしでブレークポイントを開始し、プログラムが実行されているインスタンスを特定するときはp myObjectを使用しますアドレスを取得し、そのアドレスを使用する条件を設定します(self == 0x8badf00dなど)。

1

- (void)eatAPieceOfFruit: (NSFruit *)fruit { 
    NSString * fruitType = [fruit species]; 
    BOOL hasSeeds = [fruit hasSeeds]; 

    NSInteger deliciousnessRating = [self enjoymentOfFruitType: fruitType]; 
    NSString * reactionToEating = [self phraseForFruitType: fruitType]; 

    // Breakpoint set here 

} 

デバッガがアクセス権を持つと知っていますスコープ内にある変数の名前 - あなたが壊れた行の実際のコードで使用できる変数であれば、デバッガ経由でアクセスすることもできます。だから、デバッガのプロンプトで:

po reactionToEating 

それが何であるかを見るために、または他のローカル変数の名前(つまりは、「印刷オブジェクト」の「PO」です)。スコープ内にあるオブジェクトのメソッドを呼び出すには、次のようにします。

print (int)[reactionToEating length] 
po [reactionToEating capitalizedString] 
2

メッセージを特定のインスタンスに送信したいときは、それを解除しますか?

ブレークポイントとウォッチポイントに関するXcodeのドキュメントを参照してください。基本的には、ブレークポイントに条件を設定して、自己があなたが興味のあるインスタンスでない場合に自動的に続行するようにすることができます。

関連する問題