Wysłano, twierdzenia są wyłączone, otrzymujesz rzadki raport o awarii wskazujący, że w kodzie wystąpiło naruszenie wskaźnika zerowego W środowisku programistycznym problem zostałby wychwycony przez aser.
Wszystko, co masz, to raport o awarii, więc odtworzenie problemu jest prawie niemożliwe. Podążanie śladami wstecznymi nie daje żadnych wskazówek, dlaczego awaria miała miejsce w pierwszej kolejności.
Opcje: - Dodaj sprawdzanie wskaźnika, aby zapobiec awarii. Zapobiegnie to awarii, ale prawdopodobnie nawet nie dowiesz się, dlaczego tak się stało. - pozwól mu latać, mam nadzieję, że powtórzy się to ze scenariuszem repro
Powiedzmy, że aplikacja nie jest przeznaczona dla pocisku kierowanego lub automatycznego układu hamulcowego ...
Które byś wybrał?
Odpowiedzi:
Wybrałem drugie podejście. Nie ma sensu ukrywać awarii, jeśli wskaźnik NULL był nieoczekiwany w miejscu, w którym nastąpiła awaria. Ten wskaźnik NULL w większości przypadków byłby tylko jednym z symptomów, że coś innego jest nie tak. Jeśli ukryjemy go za pomocą wskaźnika NULL, jest prawie pewne, że coś innego się zepsuje. Wydaje mi się, że masz większą szansę na uchwycenie scenariusza, jeśli znasz punkt, w którym ulega awarii za każdym razem zamiast w losowym miejscu.
źródło
Jak często zdarza się awaria? Zdarza się to tylko jednemu z wielu klientów w jakiejś niejasnej sprawie? Jakie są konsekwencje (utrata danych, awaria systemu)? Jeśli zdarza się to raz na milion przypadków, a oni po prostu muszą zrestartować aplikację i żadne dane nie zostaną utracone, to prawdopodobnie nie trzeba tego naprawiać - zostaw to w ten sposób.
Jak drogie (pieniądze i czas) jest dodawanie twierdzeń i wysyłanie ich do wszystkich klientów (jeśli tylko część klientów otrzyma nową wersję, to reszta może dostać się do problemu nie sprawdzonego zerowego)? Jakie są szanse na znalezienie problemu? Jeśli po prostu umieścisz losowe kontrole w kodzie w celu wykrycia błędu, jest to zła praktyka ...
Czy problem można odtworzyć na komputerze klienta? Czy możesz uzyskać dostęp do tego komputera? To może być naprawdę cenne
Przejrzyj raporty o awariach i upewnij się, że podane informacje są przydatne i mogą pomóc w zdiagnozowaniu problemu
źródło
W określonej kolejności zostałby złapany i naprawiony, ale bieżący ślad nigdy nie został złapany.
Powinieneś być w stanie zobaczyć, co poszło nie tak ze zrzutem awaryjnym, czy sprawdziłeś parametry itp.?
Dodatki, które można wykonać na podstawie czasu, który chcesz w to poświęcić:
Zarchiwizuj zrzut awaryjny i odnieś się do niego w kodzie z komentarzem do linii, w
której się zawiesił , dzięki czemu osoba, która bada bardzo podobny zrzut pamięci, wie, że zdarzyło się to przed ...
[czas spędzony: krótki]
Dodatkowe kontrole, logowanie, ... Chcesz temu zapobiec i uzyskać więcej informacji następnym razem.
[spędzony czas: średni]
Sprawdź, czy niemożliwe jest wywołanie aplikacji w taki sposób, aby doszło do tego naruszenia.
[czas spędzony: długi]
źródło
Obecnie wysyłam z włączoną funkcją assert (). Nie kosztuje dużo i może znacznie ułatwić życie w nieprzyjaznych sytuacjach (tj. Środowiska klienta są często bardziej wrogie niż środowiska deweloperów lub kontroli jakości).
źródło