2010-05-13 12 views
8

Pracuję nad przepisaniem mojego nieoczekiwanego procesu obsługi błędów i chciałbym zapytać społeczność:Jakie informacje przechwytujesz, gdy oprogramowanie zawiesza się w terenie?

Jakie informacje przechwytujesz zarówno automatycznie, jak i ręcznie, kiedy oprogramowanie, które napisałeś, zawiesza się?

Teraz przechwycić kilka elementów, z których niektóre są:

Automatic:

  1. Nazwa aplikacji, który rozbił
  2. wersję aplikacji, który rozbił
  3. ślad stosu
  4. Wersja systemu operacyjnego
  5. RAM używana przez aplikację kation
  6. Liczba procesorów
  7. Zrzut ekranu: (tylko w zastosowaniach niepublicznych)
  8. nazwę użytkownika oraz informacje kontaktowe (z Active Directory)

Manual:

  1. W jakim kontekście znajduje się użytkownik (np. Firma, numer telefonu pomocy technicznej, numer RA itp.)
  2. Kiedy użytkownik powinien się wydarzyć? (Typowa odpowiedź: „nie upaść”)
  3. Kroki prowadzące do odtworzenia

Jakie inne bity informacji na temat przechwytywania, który pomaga odkryć prawdziwą przyczynę problemem zastosowań, zwłaszcza biorąc pod uwagę, że większość użytkowników po prostu miazga. klawiatura pytany powiedzieć, co się stało

dla ścisłości używam C#, WPF i .NET w wersji 4, ale nie koniecznie chcą ograniczyć się do tych

pokrewne:.. What to: Collect Information When Software Crashes

Powiązane: What should be included in the state-of-the-art error and exception handling strategy?

Odpowiedz

0

(Jest to nieco Windows/.NET specyficzny, ale to jest to, co podano w pytaniu, i myślę, że jest to bardzo przydatne informacje w tym kontekście.)

ile aplikacja jest ściśle jednowątkowy, chcesz plik zrzutu (który da ci stos dla wszystkich wątków, przynajmniej), a nie tylko ślad stosu dla wątku rzucającego wyjątek.

Generowanie zrzutu, który nie jest zbyt duży i ma wystarczającą ilość informacji, aby uzyskać przydatne śledzenie stosu, jest nieco trudne, ale istnieje bardzo przydatne narzędzie o nazwie clrdump, które będzie obsługiwać niektóre z gorier szczegółów dla Ciebie.

Clrdump jest najczęściej opakowaniem pliku DbgHelp.dll firmy Microsoft. Możesz użyć DbgHelp bezpośrednio - patrz this question - ale wtedy dostaniesz "pełny minidump", który będzie tak duży, jak wirtualna przestrzeń adresowa twojej aplikacji, która może być dość duża. Clrdump wykonuje dobrą robotę tworzenia małego zrzutu z tylko śladami stosu oraz wystarczającą ilością informacji dla SOS, aby móc je odczytać.

0

LA Transtar przechowuje również dziennik kluczy, który jest zapisywany tylko w przypadku błędów. Ten dziennik zawiera dane wejściowe i ślad programu podczas jego wykonywania. Dziennik jest resetowany na początku każdej nowej transakcji.

0

Nie wspomniano o rejestrowaniu procesów (jak syslog w systemie Linux, Podgląd zdarzeń dla systemu Windows?). Ponieważ mam również tło administratora sys naprawdę doceniam programy z funkcją logowania. Jeszcze lepiej, jeśli można wybrać poziom szczegółowości.

Dobrze jest wiedzieć więcej o środowisku i dobrze, jeśli użytkownicy muszą wykonywać pewne prace integracyjne z innymi narzędziami.

Jeśli użytkownicy są bardziej techniczni, można poprosić ich o ustawienie szczegółowości rejestrowania i ponowne odtworzenie błędu.

0

Zasadniczo nie ma złotej zasady, którą należy stosować i wdrażać w każdej aplikacji. W zależności od aplikacji biznesowej i scenariusza najodpowiedniejsze są różne rzeczy do gromadzenia informacji w przypadku wystąpienia błędu.

Te, które wymieniłeś są OK, ale tutaj jest nieco bardziej, że jest dobry, aby się zalogować:

  • parametry wejściowe dla krytycznych i złożonych operacji
  • kontekście programu - niektóre przedmioty z ciężkimi algorytmów - Najwięcej klasy ryzyka, posiadająca
  • stan, w którym znajduje się Twój program

przykład: przepływ programu jest jak automatów państwowej i masz 5 stany an d osiągnięciu stanu 3.

  • jeśli masz aplikację, która jest serwer-klient, zbieranie logów - zarówno ze strony dostawców i konsumpcji

  • zrzutu pamięci nie jest na ogół dobra sugestia - zrób to tylko wtedy, gdy musisz zrozumieć problemy w frameworkach lub JVM (na przykład), nad którymi nie masz kontroli. OutOfMemoryError np

0

nie widzę na liście najważniejsze informacje (kiedy mówimy o poziomie DotNet/java kodu).
Typ wyjątku, komunikat i śledzenie.
Możesz użyć prostego kodu, aby wychwycić wyjątki i "zapisz do dziennika"/"wyślij bezpośrednio na e-mail".

1

A teraz z obozu paranoja :(

rozważyć, co przemysł cele programowe. Gathering wszelkie informacje o użytkowniku (nawet aktywny nazwa katalogu) lub sieci mogą uzyskać aplikacja Blackballed i potencjalnie niesie odpowiedzialności. Co to znaczy jeśli twoja baza danych błędów zostanie przejęta i ta informacja zostanie wykorzystana do włamania się do sieci laboratoriów bankowych lub rządowych Czy raport błędu zawierający ich IP zostanie zauważony?

Na przykład, jeśli chcesz zebrać dane sieciowe w celu zdiagnozowania problemów z siecią, zastanów się, czy Twoja aplikacja zastąpi nazwy systemów lub adresy IP z symbolami zastępczymi, zanim dane zostaną odesłane do Ciebie. (emailSrvr1, bankAcctNumSrv, staje się srvr1 i srvr2) Większy problem z wykrywaniem problemów, ale może być tego wart. Wciąż przechwytuje informacje, które mogą wpędzić cię w kłopoty, ale mogą pomóc.

Przez kilka lat pracowałem z wysokiej klasy przedsiębiorstwami i rządem, co koloruje moją perspektywę, ale prawdopodobnie warto zastanowić się, co zbieracie i jak jest przechowywany.

Powiązane problemy