2011-01-26 21 views
15

Czy istnieje sposób śledzenia zmian zmiennych lub zmian pamięci w Xcode? Szukam funkcjonalności, takiej jak punkt przerwania danych programu Visual Studio.Śledzenie zmiennej lub zmiana pamięci w Xcode?

Chcę wiedzieć, gdzie zmienia się ramka widoku obiektu. Chcę ustawić punkt przerwania dla zmiennej składowej i uruchomić ją. Wtedy mogłem ustalić, gdzie się to zmieniło.

Odpowiedz

19

Xcode używa gdb (lub lldb, ale to już inna historia) do wdrożenia funkcji debugowania. gdb ma możliwość ustawienia sprzętowych punktów obserwacyjnych, a więc także Xcode.

This to przydatna strona do ogólnego debugowania błędów pamięci. Okno konsoli debugowania Xcode jest tak naprawdę powłoką gdb, możesz wpisać komendy, jak chcesz. Zawsze pomocny Quinn Taylor wyjaśnia, jak to zrobić w poście pokrewnym this.

Jeśli wolisz uniknąć bezpośredniej interakcji z gdb bezpośrednio, możesz kliknąć prawym przyciskiem myszy zmienną w oknie debugowania Xcode i wybrać "Watch Variable". Xcode wyświetli ostrzeżenie o każdej zmianie wartości zmiennej.

+0

Doceniam odpowiedź szczegółową! Spróbuję! – SeniorLee

+0

Nigdy nie myślałem, aby kliknąć prawym przyciskiem myszy zmienne w oknie zegarka! Teraz mam nadzieję, że faktycznie trafi;) Wydaje się, że ropey wystarczy wyświetlić wartości zmiennych - mówienie mi, że lokalne znaki są poza zasięgiem, naprawdę nie jest pomocne –

+0

@LaceySnr: sprawdź moją odpowiedź. Mam taki sam problem z zegarkiem XCode. Właśnie dlatego używam punktu obserwacyjnego gdb. –

1

Tak.

W menu Run znajduje się "Debugger", który zapewnia wizualną nakładkę na gdb.

Ponadto istnieje przycisk punktu przerwania obok przycisku Utwórz i uruchom. Możesz go kliknąć i zarządzać punktami przerwania w opcji Uruchom> Zarządzaj punktami przerwania.

+1

nie jestem pewien, że to, czego szuka. Mówisz o standardowych punktach przerwania, ale on mówi o zerwaniu, gdy dane przechowywane w miejscu w pamięci zmieniają się. Bardziej przypomina punkt obserwacyjny niż punkt przerwania. –

+0

Mam to. Tak, nie wiem, czy są jakieś "wyzwalacze". Jednak za pomocą Debuggera i użycia standardowych punktów przerwania widać zmianę danych. Prawdopodobnie nie jest tak gładka jak Visual Studio. – aqua

9

Można użyć hardware watchpoints.


Trzeba uzyskać adres zmiennej, którą chcesz śledzić (typ p &my_var w wierszu gdb).

Zostanie wydrukowany jakoś tak jak 0x12345678.

  • Z gdb: typ watch *(int *)0x12345678.

  • Z lldb: watch set expression (int *)0x12345678 (lub w s e (int *)0x12345678)

Zakłada zmienna jest int. Na tym adresie zostanie utworzony sprzętowy punkt obserwacyjny.


Nadzieja to pomaga.

Powiązane problemy