2009-10-15 13 views

Odpowiedz

14

Po krótkiej pogawędce z debuggerem, to właśnie odkryłem.

Można ustawić punkt przerwania w objc_msgSend warunku przerwania na pierwszy argument za zero (odbiornik):

  1. Otwórz okno "Pułapki": Command-Option-B
  2. Podwójne kliknięcie w ostatnim rzędzie, aby utworzyć nowy punkt przerwania symboliczne
  3. Wprowadź symbol: objc_msgSend
  4. Enter stan w kolumnie „stan”: *(int*)($esp+4) == 0

Po uruchomieniu pliku wykonywalnego będzie się on łamał bardzo często, ponieważ wysyłanie wiadomości do zera jest bardzo częste. Aby uzyskać przegląd tego, co się dzieje, możesz dodatkowo skonfigurować punkt przerwania:

  1. Naciśnij przycisk plus, aby dodać polecenie punktu przerwania.
  2. Wybierz "Polecenie debuggera" z wyskakującego okienka.
  3. Wprowadź p (char*)*(int*)($esp+8) w dziedzinie dowodzenia
  4. Kliknij przycisk „auto-nadal” pole do punktu przerwania rzędu (jednego z małą strzałką w ostatniej kolumnie)

Kiedy teraz kontynuować wykonanie, pokochasz zobacz wszystkie nazwy komunikatów (wysyłane do zera) w konsoli debuggera.

Wszystkie powyższe działa tylko na Intel Mac (32-bitowy kakao lub Cocoa Touch w symulatorze). Architektury PPC lub ARM używają innych nazw rejestrów i konwencji wywoływania. Zostawiam to jako ćwiczenie dla ciebie, aby dowiedzieć się, jak uzyskać tej pracy na tych platformach;)

Powiązane problemy