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ść?
W jaki sposób można uzyskać punkt przerwania, jeśli zmienna instancji w klasie ma zmienioną wartość?
Odpowiedz
Dla łamania Warunkowo:
- opcja Cmd + kliknij punkt przerwania
- dodać warunek przerwa tak:
Za złamanie na każdą okazję do wartość uległa zmianie:
- Wdróż trywialnego setera (i gettera ze względu na czysty kod).
- 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):
Aktualizacja:
Dodawanie punktu obserwacyjnego
- Przerwa w dowolnym miejscu tak, że szybka
(lldb)
pokazuje się w konsoli - Type w
watchpoint set variable _position
(zastąpić _position z Ivar chcesz oglądać) - Zanotuj przydzielony numer watchpoint do nowo utworzonego watchpoint.
- 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. - Kontynuuj bieganie. Przerywasz, gdy wartość odpowiada warunek, a będziesz mógł sprawdzić ramkę stosu, aby zrozumieć, skąd pochodzi połączenie.
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
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
Będzie działać na podstawie tego, co jest obliczane, do wyrażenia zapisanego w określonym zakresie punktu przerwania. – Stavash
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.
Ja też uważam, że KVO jest również opcją, aby to zrobić. – Exploring
Można przesłonić ustawiający position
, aby mieć punkt przerwania, gdy ustawia zmienną.
Czy można zobaczyć, która linia wywołała setera? –
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:
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
@ dasblinkenlight Czy można zobaczyć, który wiersz wywołał zestaw? –
Absolutnie - otwórz stos wywołań i kliknij dwukrotnie klatkę jeden od bieżącego. – dasblinkenlight