Wie Sie zu beheben sind .NET 2.0 Error Reporting Meldungen im Ereignis-log?
Arbeite ich auf einem open-source-Produkt namens EVEMon geschrieben in C# targeting .NET 2.0-Plattform, ich habe einen Benutzer, der leidet eine seltsame .NET-crash, dass wir nicht in der Lage gewesen zu beheben.
Ereignistyp: Fehler Quelle: .NET Runtime 2.0 Error Reporting Ereignis Kategorie: Keine Ereignis-ID: 5000 Datum: 4/29/2009 Zeit: 10:58:10 Uhr Benutzer: N/A Computer: entfernt diese Beschreibung: EventType clr20r3, P1 evemon.exe, P2 1.2.7.1301, P3 49ea37c8, P4 system.windows.Formen, P5 2.0.0.0, P6 4889dee7, P7 6cd3, P8 18, P9 system.argumentexception, P10 NIL. Daten: //hex Darstellung der oben genannten Beschreibung
Sich die Anwendung stürzt ab, out-Anzeige ein Fehler (trotz einer Fehlerbehandlung UI), die oben genannten Meldungen kopiert wurde, aus dem Windows-Ereignisprotokoll. Der Endbenutzer hat re-installiert .NET und aktualisiert, um die neuesten Versionen. Die .PDB-Dateien verteilt, mit jeder release-version des Programms zur Unterstützung bei debugging und testen, die Benutzer mit dem problem in der Frage hat die volle Ergänzung von PDB-Dateien für die richtige version von EVEMon.
Gibt es eine bestimmte, bewährte Technik zu analysieren und zu diagnostizieren, diese Art von Absturz? und wenn ja, welche Werkzeuge und Technologien stehen zur Verfügung, um Hilfe bei Debuggen?
Besonderer Dank
Möchte ich einen besonderen Dank an Steffen Opel und markieren Sie, dass die seine Antwort zwar nicht direkt der Beantwortung der Frage, ich wurde gefragt, adressiert das größere Problem mit meinem code-Basis, die Globale Fehlerbehandlung wurde, fehlt eine wichtige Komponente.
InformationsquelleAutor Richard Slater | 2009-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich das problem angehen für ein end-Benutzer mit einem crash.
Herunterladen und installieren der Debugging Tools für Windows auf http://www.microsoft.com/whdc/devtools/debugging/default.mspx
Sobald die tools installiert sind (Sie am Ende zu C:\Program Dateien\ per default) starten Sie ein Kommandozeilen-Fenster.
Wechseln Sie in das Verzeichnis, das enthält adplus (e.g "C:\Program Files\Debugging Tools for Windows (x86)").
Führen Sie den folgenden Befehl. Dies wird die Anwendung starten und befestigen Sie adplus.
Nach dem crash dump erstellt wird
Einmal stürzt die Anwendung, starten Sie WinDbg und laden Sie die .dmp-Datei, die erstellt wird, in C:\debug. (Datei --> Open Crash Dump)
Diese Befehle auszuführen, um zu sehen, der stack-trace und hoffentlich finden Sie das problem.
Laden SOS für debugging
Zu sehen, der stack-trace
Sehen eine weitere nützliche stack-trace
Stecken in einem Objekt..vielleicht sehen, was die Ursache der Ausnahme
e.g das ist das Ergebnis aus einer Anwendung, die ein Fehler aufgetreten zufällig mit einem E /a-Ausnahme. WinDbg wies darauf hin, Pfad verwiesen wird, die falsch war.
+1 für bestimmte Schritte.
Eine der besten SO Antworten, die ich je gesehen habe. Kurze, auf den Punkt und sehr hilfreich.
+1 ich kann nicht warten, um zu versuchen, diese auf einer Maschine in das Feld ein. Ich danke Ihnen so sehr.
InformationsquelleAutor Michael Baker
Spähen in Ihre source-code (trunk) gibt an, dass Ihr nicht behandelte exception-Behandlung scheint unvollständig zu sein in Bezug auf Windows Forms-Anwendungen:
Müssen Sie behandeln beide nicht-UI-thread-Ausnahmen und UI-thread Ausnahmen:
Für die ehemaligen, die Sie implementieren müssen, um eine CLR-unhandled exception-handler über
AppDomain.CurrentDomain.UnhandledException
, die ist bereits vorhanden.Für letzteres müssen Sie implementieren einer Windows Forms-unhandled exception-handler über
Application.ThreadException
, die zu fehlen scheint; dies könnte in der Tat die Ausbeute sind genau die Probleme, die Sie erleben. Für eine Implementierung Beispiel finden Sie im MSDN-Dokumentation - Anwendung.ThreadException-Ereignis.Bitte beachten Sie, dass Sie gerade jetzt explizit unterdrücken fangen unbehandelte Windows Forms Ausnahmen über
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
Sie müssen dies ändern, umUnhandledExceptionMode.CatchException
routing aktivieren, um den handler fürApplication.ThreadException
als richtig vorgeschlagen Jehof schon.+1 für Suche in den source-code - und das riecht so weit wie der beste Ansatz.
InformationsquelleAutor Steffen Opel
Welchem Betriebssystem (Windows XP, Windows Vista, etc.) hat der Benutzer verwenden?
Wenn Windows Vista versuchen, Sie zu deaktivieren "feature Problemberichte und-Lösungen" (Systemsteuerung-->Problem-Berichte und Lösungen-->Einstellungen Ändern-->Erweiterte Einstellungen - >deaktivieren Sie für meine Programme, problem-reporting)
Oder versuchen
Dies wird immer eine route Ausnahmen zum ThreadException-handler.
InformationsquelleAutor Jehof
Kurz gesagt: es ist eine unbehandelte Ausnahme in der Anwendung.
Wenn du Zugriff auf die Maschine (durch remote Zugriff, etc.), installieren Sie Visual Studio Express und starten Sie die Anwendung. Sie sollten sehen, ein Dialogfeld mit der Möglichkeit zum Debuggen der Anwendung mit einer neuen Instanz von Visual Studio.
Kann es auch sein, dass es etwas ist, was verhindert, dass Windows Forms ordnungsgemäß initialisiert. Ich habe gesehen, forum-Beiträge, die darauf hinweisen, dass die font-Probleme verursachen kann, -- stellen Sie sicher, dass die Benutzer die Schriftarten installiert werden, die von Ihrer Anwendung benötigt werden, plus die üblichen Standardeinstellungen wie MS SansSerif, Arial, Tahoma, Times und dergleichen.
Ist und andernfalls, dass... versuchen opfern ein Huhn über den PC. Funktioniert ein Zauber jedes mal!
InformationsquelleAutor Jeremy McGee
Hatten wir Probleme mit Ausnahmen im Thread-Code. Wenn Sie laichen einen neuen Thread und vergessen zu handhaben eine Ausnahme in der thread-Methode, die Anwendung einfach "beendet" - keine Fehlermeldung, kein gar nichts, sondern nur einen Eintrag im Ereignisprotokoll. Selbst dann nicht
UnhandledExceptionHandler
ausgelöst wird.Vielleicht so etwas wie dies ist die Ursache?
+1 hier, habe ich das schon mal gesehen (war zu Antwort sagen, ziemlich viel vor!!!) ... Als ein Erster Versuch zu verfolgen, das problem nach unten, wickeln Sie code, der ausgeführt wird, in der ein worker-thread in eine vollständige try-catch, meldet sich jede exception und sehen, was angemeldet..
InformationsquelleAutor Thorsten Dittmar
...wenn Sie in der Lage sind, zu Kontaktieren, die Leid Benutzer, hier ist eine
Idee: melden Sie sich vor der Ausführung Stufen
Statt, die eine Verknüpfung zu Ihrem
program.exe
, eine Verknüpfung zuprogram.bat
, dieDie erste Zeile
Program.cs
werden daherIn der handler
AppDomain.UnhandledException
ersten Zeile wirdStellen Sie außerdem sicher, dass der handler nicht Speicher oder Ressourcen — pre-reservieren Sie auf Programme starten. Handler nur auslösen, das schreiben in das Protokoll.
Kommentare
Ist es sehr wahrscheinlich, dass die
stage.txt
(gesendet durch den Benutzer) enthalten "Pre-start". Dies geschieht, wenn eine Ausnahme geworfen wird in 3rd-party .dll — noch bevor das Programm gestartet wurde.In diesem Fall müssen Sie eine einfache checker-Programm, das wird sich nicht auf die Assemblys, die Sie
program.exe
tut, aberAssembly.Load(...)
.P. S.
stage.txt
gestellt werden sollten irgendwo unter %APPDATA%, nicht in Program Files.Fand ich ein interessanter Fall, auf dem Server 2003 und eine weitere schöne Diskussion.
InformationsquelleAutor bohdan_trotsenko
Sollten Sie eine detaillierte stack-trace durch das Absenden der
.pdb
- Datei für die jeweilige Version an die Benutzer (setzen neben dem.exe
) und Sie reproduzieren Sie den Absturz.Ich habe mit dem Benutzer, und er hat in der Tat die .PDB-Dateien für alle Baugruppen.
InformationsquelleAutor Sören Kuklau
Sollten Sie Griff
AppDomain.UnhandledException
im code.Es wurde ein ähnliche Frage gefragt. Sehen verwandten zu.
InformationsquelleAutor bohdan_trotsenko