Jestem świadomy, że wysyłanie wiadomości do obiektów zerowych w Objective-C jest całkowicie w porządku. Jednak jestem ciekawy, czy istnieje jakaś obsługa środowiska wykonawczego do zgłaszania takich sytuacji. Widzę, że jest to użyteczne w sytuacjach testowania/debugowania.Czy mogę otrzymać ostrzeżenia dotyczące wysyłania wiadomości z pustymi obiektami?
Odpowiedz
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):
- Otwórz okno "Pułapki": Command-Option-B
- Podwójne kliknięcie w ostatnim rzędzie, aby utworzyć nowy punkt przerwania symboliczne
- Wprowadź symbol:
objc_msgSend
- 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:
- Naciśnij przycisk plus, aby dodać polecenie punktu przerwania.
- Wybierz "Polecenie debuggera" z wyskakującego okienka.
- Wprowadź
p (char*)*(int*)($esp+8)
w dziedzinie dowodzenia - 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;)
Alternatywnie, można użyć dtrace:
Using dtrace to log traces messages-to-nil
a to może być done in Instruments też.
- 1. Najlepsze praktyki dotyczące wysyłania wiadomości e-mail?
- 2. Czy mogę pominąć raport z zadania LSF bez wysyłania wiadomości?
- 3. Devise wysyła wiadomości e-mail z pustymi obiektami, gdy nadpisuję je mailer
- 4. Czy mogę to zrobić z obiektami klasy?
- 5. Ostrzeżenia dotyczące obciążenia z podpowiedzi GHCi
- 6. Testowanie wysyłania wiadomości e-mail
- 7. Wysyłanie wiadomości między dwoma obiektami JPanel
- 8. Ostrzegawcze ostrzeżenie mysql dotyczące ostrzeżenia
- 9. Prawidłowe wiadomości dotyczące zatwierdzeń
- 10. Błąd wysyłania wiadomości z linkiem do Facebooka
- 11. Aplikacja ASP.NET do wysyłania wiadomości z hiperłączem
- 12. Jak otrzymać potwierdzenie wysyłania pakietów za pomocą StreamSockets WinRT?
- 13. Funkcja wysyłania wiadomości bez wyjścia
- 14. Ostrzeżenia dotyczące funkcji bez specyfikacji typów?
- 15. Ostrzeżenia dotyczące kompilacji dotyczące brakujących wymaganych protokołów NIE ROZPOZNAJĄCYCH
- 16. Jak można programowo uniknąć ostrzeżenia zabezpieczeń programu Outlook podczas wysyłania wiadomości e-mail?
- 17. Czy istnieje sposób, w jaki mogę uczynić g ++ tylko emitować ostrzeżenia dotyczące moich plików?
- 18. Jak mogę otrzymać pakiet "rcom"?
- 19. Jak mogę sprawdzić, czy Log4perl emitował ostrzeżenia podczas biegu?
- 20. Skrypt powłoki do wysyłania wiadomości e-mail
- 21. Kontynuacja procesu korzystania z VBA do wysyłania wiadomości e-mail
- 22. Czy mogę pisać testy dotyczące nieprawidłowych wcieleń?
- 23. MessagingExceptionIOException podczas wysyłania wiadomości w języku Java?
- 24. Problem z kodowaniem tematu podczas wysyłania wiadomości e-mail
- 25. iPhone (audio) wysyłania wiadomości zabić mediaserverd
- 26. skrypt wsadowy do wysyłania wiadomości e-mail
- 27. Właściwy sposób wysyłania wiadomości e-mail z usługi Windows
- 28. Wirtualne dziedziczenie z pustymi klasami
- 29. błąd podczas wysyłania wiadomości e-mail z CodeIgniter
- 30. Używanie SmtpClient do wysyłania wiadomości e-mail z Gmaila
Dodałem twój blog do mojego RSS - świetne rzeczy. – nall
Cool. Mam więcej wpisów na liście rzeczy do zrobienia. Po prostu znajdź czas. – bbum