Możesz ustawić warunkowy punkt przerwania w Xcode, ustawiając punkt przerwania w sposób normalny, następnie kliknij go i przytrzymaj klawiszem Control i wybierz Edit Breakpoint (wybierz Run -> Show -> Breakpoints).
W pozycji punktu przerwania znajduje się kolumna Warunek.
Jest kilka kwestii, o których należy pamiętać. Po pierwsze, gdb nie rozumie składni dot, więc zamiast myObj.name, musisz użyć [myObj name] (chyba że name to ivar).
Następnie, podobnie jak w przypadku większości wyrażeń w gdb, należy podać typ wyniku zwracanego, a mianowicie "BOOL". Tak ustawić STAN:
(BOOL)[[myObj name] isEqualToString:@"Bar"]
Często jest to rzeczywiście łatwiej jest po prostu zrobić to w kodzie poprzez tymczasowe dodanie kodu jak:
if ([myObj.name isEqualToString:@"Bar"]) {
NSLog(@"here");
}
a następnie ustawienie punktu przerwania na NSLog. Wtedy twój stan może być dowolnie złożony, nie martwiąc się o to, co gdb może i nie może zanalizować.
Tyle że zmieniając swój kod pojawia się ryzyko zapominania aby usunąć rejestrację lub zmianę zachowania –
to prawda. Często złagodzę to przez dodanie "NYI" (jeszcze nie zaimplementowałem) do napisu, a następnie moje wyszukiwanie przed wydaniem sprawdzenia dla NYI go złapie. –
Jakieś wskazówki o tym, jak to działa w lldb? – bentford