Welche Informationen erfassen Sie, wenn Ihre Software im Feld abstürzt?

8

Ich arbeite daran, meinen unerwarteten Fehlerbehandlungsprozess neu zu schreiben, und ich möchte die Community fragen:

Welche Informationen erfassen Sie sowohl automatisch als auch manuell, wenn Software, die Sie geschrieben haben, abstürzt?

Im Moment nehme ich ein paar Dinge auf, von denen einige sind:

Automatisch:

  1. Name der App, die abgestürzt ist
  2. Version der App, die abgestürzt ist
  3. Stapelverfolgung
  4. Betriebssystemversion
  5. RAM von der Anwendung verwendet
  6. Anzahl der Prozessoren
  7. Screenshot: (Nur für nicht-öffentliche Anwendungen)
  8. Benutzername und Kontaktinformationen (aus Active Directory)

Handbuch:

  1. In welchem ​​Kontext befindet sich der Benutzer (z. B. welche Firma, Telefonnummer des technischen Supports, RA-Nummer usw.)
  2. Wann hat der Benutzer das erwartet? (Typische Antwort: "Nicht abstürzen")
  3. Schritte zum Reproduzieren.

Welche anderen Informationen erfassen Sie, die Ihnen helfen, die wahre Ursache eines Anwendungsproblems zu erkennen, vor allem angesichts der Tatsache, dass die meisten Benutzer die Tastatur einfach auf die Tastatur packen, wenn Sie gefragt werden, was passiert ist.

Für den Datensatz verwende ich C #, WPF und .NET Version 4, aber ich möchte mich nicht unbedingt auf diese beschränken.

Related: Was zu: Sammeln von Informationen, wenn Software abstürzt

Verwandte:

    
Russ 23.05.2017, 12:07
quelle

6 Antworten

0

(Dies ist etwas Windows / .NET-spezifisch, aber das ist, was Sie in der Frage angegeben haben, und ich denke, das ist eine ziemlich nützliche Information in diesem Kontext.)

Sofern Ihre Anwendung nicht streng single-threaded ist, möchten Sie eine Dump-Datei (die Ihnen mindestens den Stack für alle Threads liefert), nicht nur eine Stack-Trace für den Thread, der die Ausnahme auslöst.

Das Erzeugen eines Dumps, der nicht zu groß ist und genug Informationen enthält, um Ihnen nützliche verwaltete Stack-Traces zu geben, ist ein bisschen schwierig, aber es gibt ein sehr nützliches Dienstprogramm namens clrdump , die einige der Gorier-Details für Sie behandeln wird.

Clrdump ist meist ein Wrapper für Microsofts DbgHelp.dll. Sie können DbgHelp direkt verwenden - siehe diese Frage - aber dann erhalten Sie einen "full Minidump ", der so groß ist wie der virtuelle Adressraum Ihrer Anwendung, der ziemlich groß sein kann. Clrdump erstellt einen kleinen Dump mit nur den Stack-Traces plus genügend Informationen für SOS, um sie lesen zu können.

    
McKenzieG1 23.05.2017, 12:07
quelle
1

Und jetzt aus dem Paranoia Camp: (

Überlegen Sie, auf welche Branche die Software zielt. Das Sammeln von Informationen über den Benutzer (sogar den Namen des aktiven Verzeichnisses) oder das Netzwerk kann dazu führen, dass Ihre App gescheitert ist und potenziell haftbar gemacht wird. Was ist, wenn Ihre Fehlerdatenbank kompromittiert ist und diese Informationen verwendet werden, um in das Labor einer Bank oder eines staatlichen Labors einzudringen? Wird der Fehlerbericht, der ihre IPs enthält, bemerkt? Kannst du verklagt werden? Vielleicht ...

Wenn Sie z. B. netzwerkspezifische Daten zur Diagnose von Netzwerkproblemen sammeln müssen, sollten Sie in Erwägung ziehen, dass Ihre App Systemnamen oder IP-Adressen durch Platzhalter ersetzt, bevor Daten an Sie zurückgesendet werden. (emailSrvr1, bankAcctNumSrv, wird zu srvr1 und srvr2) Es ist ein größerer Schmerz beim Aufspüren von Problemen, aber es kann sich lohnen. Dies erfasst immer noch Informationen, die Sie in Schwierigkeiten bringen können, kann aber helfen.

Ich arbeite seit einigen Jahren mit High-End-Unternehmen und der Regierung, was meine Sichtweise beeinflusst, aber es ist wahrscheinlich eine Überlegung wert, was Sie sammeln und wie es gespeichert wird.

    
Oldmicah 16.05.2010 13:50
quelle
0

LA Transtar führt auch ein Schlüsselprotokoll, das nur für Fehler gespeichert wird. Dieses Protokoll enthält die Eingabe und eine Ablaufverfolgung des Programms, während es fortschreitet. Das Protokoll wird zu Beginn jeder neuen Transaktion zurückgesetzt.

    
Dave 13.05.2010 20:34
quelle
0

Sie erwähnen nicht die Protokollierung von Prozessen (wie Syslog in Linux, Event Viewer für Windows?). Da ich auch einen Systemadministrator-Hintergrund habe, schätze ich wirklich Programme mit einer Protokollierungseinrichtung. Noch besser, wenn die Ausführlichkeitsstufe ausgewählt werden kann.

Es ist gut für Sie, mehr über die Umgebung zu erfahren, und es ist gut für Ihre Benutzer, wenn sie irgendeine Art von Integrationsarbeit mit anderen Tools ausführen müssen.

Wenn Ihre Benutzer technischer sind, können Sie sie bitten, die Ausführlichkeit der Protokollierung auf das Maximum einzustellen und den Fehler erneut zu reproduzieren.

    
SystematicFrank 15.05.2010 14:06
quelle
0

Grundsätzlich gibt es keine goldene Regel, die Sie befolgen und in jeder Anwendung implementieren müssen. Abhängig von Ihrer Geschäftsanwendung und Ihrem Szenario sind verschiedene Dinge am besten geeignet, um bei einem Fehler in die Informationssammlung einbezogen zu werden.

Die, die du erwähnt hast, sind in Ordnung, aber hier ist ein bisschen mehr, das gut ist, um eingeloggt zu sein:

  • Eingabeparameter für kritische und komplexe Operationen
  • Kontext Ihres Programms - einige Objekte mit schweren Algorithmen - die am meisten risikobehafteten Klassen
  • der Status, in dem sich Ihr Programm befindet

Beispiel: Der Ablauf Ihres Programms ist wie ein Zustandsautomat und Sie haben 5 Zustände und Sie haben Zustand 3 erreicht.

  • Wenn Sie eine Anwendung haben, bei der es sich um einen Server-Client handelt, sammeln Sie beide Protokolle - von der Anbieter- und der Verbrauchsseite

  • memory dump ist im Allgemeinen kein guter Vorschlag - tun Sie es nur, wenn Sie Probleme in Frameworks oder JVM (zum Beispiel) verstehen müssen, auf die Sie keinen Einfluss haben. OutOfMemoryError zum Beispiel

Leni Kirilov 15.05.2010 17:04
quelle
0

Ich sehe in Ihrer Liste nicht die wichtigsten Informationen (wenn wir über den Code von dotnet / java sprechen).
Der Ausnahmetyp, die Nachricht und die Ablaufverfolgung.
Sie können einfachen Code verwenden, um eine Ausnahme abzufangen, und "schreibe in das Protokoll" / "sende direkt an die E-Mail".

    
Avram 15.05.2010 22:48
quelle