2012-10-13 20 views
10

Chciałbym wyjść z obecnej metody, przez którą przechodzę."powrócić" z metody podczas kroku?

-(void)helloWorld { 
    NSLog(@"Hello"); 
    // I would like to return here, so that "World" isn't printed. 
    NSLog(@"World"); 
} 

Próbowałem następujące, ale bez powodzenia.

(lldb) expr return 
<no result> 

Czy to możliwe przy pomocy lldb?

Odpowiedz

6

Podczas debugowania za pomocą Xcode i gdy twój program jest zatrzymany w punkcie przerwania, możesz przeciągnąć małą zieloną strzałkę do dowolnej innej linii w funkcji. Na przykład. w poniższym kodzie:

Xcode breakpoint

jeśli chcę pominąć NSLog(@"B"), mogę po prostu przeciągnąć zieloną strzałkę z linii 20 do linii 23, co oznacza, że ​​funkcja będzie po prostu „powrót” z dowolnego chcę.

+1

Widziałem kilka osób zgłaszających, że pod LLDB i ARC przeciągnięcie komputera do nowej lokalizacji może spowodować awarie. Nadal istnieje kilka załamań, które należy opracować. Ponadto, jeśli znasz GDB, ale nie LLDB, zapisz kopię tego ściągawki: http://lldb.llvm.org/lldb-gdb.html –

+0

Tak, ogólnie przeciąganie komputera jest bardzo ryzykowne, chyba że zrozumieć całą alokację/inicjowanie pamięci/pamięci dzieje się za kulisami. Jeśli masz serię prostych stwierdzeń, często możesz uciec z tym, ale jest to coś bardziej wyrafinowanego i obfituje w ukryte pułapki. –

17

Niestety w Xcode 4.5.x nie ma możliwości wymuszenia wcześniejszego powrotu z funkcji. W bieżących źródłach lldb pod numerem http://lldb.llvm.org/ znajduje się nowo dodane polecenie thread return, które robi to, co chcesz - zawiera możliwość określenia wartości zwracanej przez funkcję. Nie będzie to jednak w Xcode aż do następnego wydania głównego.

+7

W Xcode 6 'powrót wątku' działa po wyjęciu z pudełka – fabb

Powiązane problemy