2011-07-27 3 views
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 

} 

디버거가 액세스 할 수있는과를 알고 : 당신을 가정

(. 사이드 참고로, 내 대안은 런타임 데이터의 과도한 NSLogging입니다)

답변

3

예, 가능합니다! 당신은 중단 점에 조건을 추가 할 수 있습니다 : 조건이 만족 될 때

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

이 프로그램은이 중단 점에서 일시 중지됩니다. self == _myGlobalInstanceOfInterest과 같은 조건을 선택할 수 있습니다.

인스턴스를 변수에 저장하지 않으려면 조건없이 중단 점을 시작한 다음 프로그램이 실행될 때 원하는 인스턴스를 파악할 때 p myObject을 사용하십시오. 주소를 가져온 다음 해당 주소 (예 : self == 0x8badf00d)를 사용하도록 조건을 설정하십시오.

1

는 다음과 같이 이야기하고 범위에있는 변수의 이름 - 코드가 파손 된 행의 실제 코드에서 사용할 수있는 변수이면 디버거를 통해 연결할 수도 있습니다. 그래서, 디버거 프롬프트에서 :

po reactionToEating 

(즉 "인쇄 개체"에 대한 "포"이다), 또는 다른 어떤 지역 변수의 이름은 무엇인지 볼 수 있습니다. 범위에있는 객체의 메서드를 호출하려면 다음을 수행 할 수 있습니다.

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

메시지를 특정 인스턴스로 보내고 싶습니까?

중단 점 및 watchpoint에 대한 Xcode 설명서를 읽으십시오. 기본적으로 자기 자신이 원하는 인스턴스가 아닌 경우 자동으로 계속되도록 중단 점에 조건을 설정할 수 있습니다.

관련 문제