2010-06-09 3 views
5

InvalidCastException in der QA-Umgebung, etwas wirft Meine Anwendung auftritt, kann ich nicht in der Entwicklung reproduzieren.Wie minidump eines .NET-Prozess zu schaffen, wenn eine bestimmte erste Chance

Ich möchte den Minidump zum Ausnahmezeitpunkt erhalten. Ich weiß von adplus, aber ich bin mir nicht sicher, wie ich es verwenden soll, damit es den Minidump erstellt, wenn InvalidCastException ausgelöst wird. Scheinbar unterscheidet es nicht eine .NET-Ausnahme von einer anderen. Vielleicht liege ich falsch und es gibt einen Weg. Oder es gibt ein anderes Werkzeug, um es zu tun. Vorzugsweise frei.

Wie auch immer, kann jemand Ratschläge, wie man mit diesem Problem umgehen?

Danke.

UPDATE

  1. Der Build ist ein Debug-Build in beide QA und Entwickler. QA führt jedoch komplexe Szenarien durch, die im Labor möglich sind und die Entwickler nicht reproduzieren können. Daher brauche ich eine Fähigkeit, Dump zu machen, wenn ich in QA laufe.
  2. Ich kann den Code ändern und Minidump aus Code erstellen. Ich wünsche mir jedoch eine flexiblere Lösung, die nicht jedes Mal, wenn ein Problem auftritt, den Code ändern muss.

UPDATE 2

Eigentlich habe ich "gestohlen" die minidump Generation Code von John Robbins SuperAssert.Net Auch hier ist dieser Code minidump von bestimmten konkreten Punkt zu erzeugen, während ich eine flexiblere brauchen Ansatz im Stil von Adplus. Der Ansatz von John Robbins besteht darin, ein CDB-Skript zu erstellen und dann den cdb-Debugger mit diesem Skript aufzurufen, um es an den Prozess anzuhängen und den Dump zu erstellen. Es verwendet die MiniDumpWriteDump API nicht.

+0

eine kurze Frage - haben Sie die Codezeile, wo die Besetzung geschieht?Wird die QA-Umgebung im Modus "Release" und nicht im Modus "Debug" kompiliert? – Paddy

+0

Die QA-Umgebung entspricht in Bezug auf den Build der Entwicklung. Was zählt, ist, dass die QA-Umgebung verteilt ist, während die Entwickler alles auf demselben Rechner ausführen. – mark

Antwort

5

Der einfachste Weg ist es Blase zu lassen, bis alle den Weg aus der App, lassen Sie den Bericht Benutzer an Microsoft, und melden Sie in Windows-Fehlerberichterstattung.

Alternativ können Sie es mit der Hand fangen von John Robbins' SUPERASSERT .NET (oder eine Teilmenge seines Codes) verwenden.

UPDATE (für Nicht-Code-Lösung): Werfen Sie einen Blick auf dem System Internals' ProcDump.

+0

Die Sache ist, dass ich eine nicht interaktive Lösung brauche und ich brauche sie jetzt. – mark

+0

Betrachten Sie meine zweite Lösung dann. Ein Minidump des laufenden Prozesses zu nehmen ist nicht trivial, also empfehle ich Ihnen, den Code von John Robbins zu verwenden. –

+0

Eigentlich habe ich den Minidump-Generierungscode von John Robbins SuperAssert.Net "gestohlen". Wieder ist dies Code für die Generierung von Minidump aus bestimmten konkreten Punkt, während ich brauche einen flexibleren Ansatz im Stil von Adplus – mark

2

Es ist möglich, haben Sie sos.dll in Ihrem ADPlus Skript .load. Diese blog post zeigt Ihnen wie.

der fragwürdigen Freuden Hüten Sie sich vor von einem minidump verwalteten Code debuggen. Wenn Sie in der QA noch auf schwer zu diagnostizierende Ausnahmen stoßen, werden Sie bei der Produktion erneut darauf stoßen. Mit Drachen atmen Feuer dann hinzugefügt. Achten Sie auf eine gute unbehandelte Ausnahmeprotokollierung, indem Sie einen Ereignishandler für AppDomain.UnhandledException schreiben. Die Protokollierung von e.ExceptionObject.ToString() liefert eine Fülle von Informationen.

3

Wollen Sie wahrscheinlich MiniDumpWriteDump API in C# Anwendung benutzen? Sehen Sie sich http://blog.kalmbach-software.de/2008/12/13/writing-minidumps-in-c/ für ein Codebeispiel an oder suchen Sie in Internat nach MiniDumpWriteDump und C#.

Wenn Sie Visual Studio 2010 verwenden, können Sie minidump in Visual Studio direkt laden (siehe http://msdn.microsoft.com/en-us/library/d5zhxt22(v=VS.100).aspx)

+0

Aktualisieren Sie die Frage, wie ich den Minidump aus Code erstellen. – mark

Verwandte Themen