私はbool
値を返し、いくつかの終了点を返すメソッドを持っています。 しかし、正しく動作していないようですので、自動ブレークポイントを設定してYES値を返すようにしたいので、デバッガですべての変数と計算をチェックできます。 YES
の値が返されるたびにデバッガを停止したいと考えています。メソッドが特定の値を返すときにXcodeで "スマート"ブレークポイントを設定する方法は?
私はobjc_exception_throw
に設定された同様のスマートブレークポイントを持っていますので、それが可能であることを知っています。
(ケースで、それは誰も、あなたが例外ブレークポイントを設定することができる方法ができます:ブレークポイントウィンドウで(ファイル名を指定して実行 - >表示 - >ブレークポイント)は、「ブレークポイント」としてobjc_exception_throw
を入力し、「場所」としてlibobjc.A.dylib
)
編集:私はそれを使用したい特定のコード:
- (BOOL)collisionOccured {
// Assumption: helicopter is of square shape (collision calculated by radius), walls are rectangles
// This approach is based on the solution seen here: http://stackoverflow.com/questions/401847/circle-rectangle-collision-detection-intersection/402010#402010
float helicopterImageWidth = [helicopter texture].contentSize.width;
float wallImageWidth = [[walls lastObject] texture].contentSize.width;
float wallImageHeight = [[walls lastObject] texture].contentSize.height;
float helicopterCollisionRadius = helicopterImageWidth * 0.4f;
CGPoint helicopterPosition = helicopter.position;
int numWalls = [walls count];
for (int i = 0; i < numWalls; i++) {
CCSprite *wall = [walls objectAtIndex:i];
if ([wall numberOfRunningActions] == 0) {
// The wall is not moving, we can skip checking it.
continue;
}
CGPoint wallPosition = wall.position;
float helicopterDistanceX = abs(helicopterPosition.x - wallPosition.x - wallImageWidth/2);
float helicopterDistanceY = abs(helicopterPosition.y - wallPosition.y - wallImageHeight/2);
if (helicopterDistanceX > (wallImageWidth/2 + helicopterCollisionRadius)) { return NO; }
if (helicopterDistanceY > (wallImageHeight/2 + helicopterCollisionRadius)) { return NO; }
if (helicopterDistanceX <= (wallImageWidth/2)) { return YES; }
if (helicopterDistanceY <= (wallImageHeight/2)) { return YES; }
float cornerDistance_sq = powf((helicopterDistanceX - wallImageWidth/2), 2) +
powf((helicopterDistanceY - wallImageHeight/2), 2);
return (cornerDistance_sq <= powf(helicopterCollisionRadius, 2));
}
// this should not occur
return NO;
}
このメソッドは、
- (void)update:(ccTime)delta {
if ([self collisionOccured]) {
NSLog(@"A collision occured");
}
}
経由で呼び出され
問題は、更新メソッドが引数としてdelta
(時間が経過した)を取るため、フレームごとに何が起きているのかを確認できないためです。実行を続けると、別のシーンが表示されます。あなただけのそれ以外の場合はret
上のウォッチポイントを設定することができ
- (BOOL)someMethod {
BOOL ret = NO;
if (something) {
ret = YES;
} else if (something_else) {
ret = YES;
}
// ... and so on
return ret;
}
あなたは:あなたがローカル戻り変数を使用している場合
Objective-C例外でRun-> Stopを使用してobjc_exception_throwブレークポイントを切り替えることもできます –