2013-08-09 6 views
12

Powiedz, że mam zmienną, self.position, w jaki sposób mogę spowodować, że Xcode będzie łamał się, gdy zmienia swoją wartość (wiele metod może to zmienić).W jaki sposób można uzyskać punkt przerwania, jeśli zmienna instancji w klasie ma zmienioną wartość?

+1

Jeśli' self.position' jest właściwością, dodaj metodę '- (void) setPosition: (CGPoint) pos {_position = pos;} 'i ustaw punkt przerwania w tym ustawniku. – dasblinkenlight

+0

@ dasblinkenlight Czy można zobaczyć, który wiersz wywołał zestaw? –

+2

Absolutnie - otwórz stos wywołań i kliknij dwukrotnie klatkę jeden od bieżącego. – dasblinkenlight

Odpowiedz

26

Dla łamania Warunkowo:

  1. opcja Cmd + kliknij punkt przerwania
  2. dodać warunek przerwa tak:

enter image description here

Za złamanie na każdą okazję do wartość uległa zmianie:

  1. Wdróż trywialnego setera (i gettera ze względu na czysty kod).
  2. Dodaj punkt przerwania do settera.

Jeśli chcesz zobaczyć, kto powołuje się na setter - wystarczy spojrzeć na następnej linii w ślad stosu (viewDidLoad w moim przykładzie):

enter image description here

Aktualizacja:

Dodawanie punktu obserwacyjnego

  1. Przerwa w dowolnym miejscu tak, że szybka (lldb) pokazuje się w konsoli
  2. Type w watchpoint set variable _position (zastąpić _position z Ivar chcesz oglądać)
  3. Zanotuj przydzielony numer watchpoint do nowo utworzonego watchpoint.
  4. Zmodyfikuj punkt obserwacyjny dla łamania warunkowego: watchpoint modify -c "_position < 0.5" 1 gdzie wyrażenie w cudzysłowach jest warunkiem, a liczba na końcu to numer punktu obserwacyjnego zapisany w punkcie 3.
  5. Kontynuuj bieganie. Przerywasz, gdy wartość odpowiada warunek, a będziesz mógł sprawdzić ramkę stosu, aby zrozumieć, skąd pochodzi połączenie.
+1

Istnieją inne fajne rzeczy, które można zrobić z punktami przerwania w XCode. Takich jak: http://stavash.wordpress.com/2012/12/22/pimp-your-xcode-add-sound-to-breakpoints/ – Stavash

+0

Wow, to miło wiedzieć! Twój przykład pokazuje jednak właściwość. Czy to działa na ivars, a także na właściwościach? – dasblinkenlight

+0

Będzie działać na podstawie tego, co jest obliczane, do wyrażenia zapisanego w określonym zakresie punktu przerwania. – Stavash

5

Prostym sposobem na to jest kliknięcie prawym przyciskiem myszy na zmienną w oknie zegarka i wybranie opcji zmiennej oglądania. Xcode wyświetli ostrzeżenie o zmianie wartości.

Możesz też rzucić okiem na Key-Value Observing.

+0

Ja też uważam, że KVO jest również opcją, aby to zrobić. – Exploring

2

Można przesłonić ustawiający position, aby mieć punkt przerwania, gdy ustawia zmienną.

+0

Czy można zobaczyć, która linia wywołała setera? –

4

Ustaw symboliczny punkt przerwania. Przejdź do Breakpoint Navigator, kliknij znak +, kliknij "Dodaj symboliczny punkt przerwania". W pierwszym polu wpisz - [YourSubclassNameHere setPosition:] ", dodaj dowolne inne ustawienie, a następnie kliknij poza oknem dialogowym: