Frage

Wir versuchen unsere Anwendung zu aktualisieren, um sie für Vista Zertifizierung einzureichen. Ein Teil der Anforderungen sind nur bekannte Ausnahmen zu behandeln und Windows-Fehlerberichterstattung behandelt alle unbehandelten Ausnahmen haben.

Wir haben einen globalen Exception-Handler in unserer Anwendung (zum Application.ThreadException Ereignisse abonniert) und dort führen wir bestimmte Verarbeitung für bekannte Ausnahmen, aber wenn eine Ausnahme ist unbekannt wollen wir es für die App werfen, zu beenden und WER zu handhaben.

Wir können nicht einen Weg, dies zu tun und die Aufrechterhaltung der Call-Stack sehen, ob wir wieder throw dann wird der Call-Stack neu erstellt.

Wir haben bei Beendigung über Environment.FailFast() gesucht, aber wir glauben nicht, dass die Ausnahmeinformationen gibt, benötigen wir würden.

Sind wir etwas fehlt offensichtlich?

War es hilfreich?

Lösung

Warum nicht nur eine neue Ausnahme auslösen und die Innerexception-Eigenschaft der nicht behandelte sein? Die Standard-Stacktrace Eigenschaft werden beide Spuren zusammen verketten.

Beachten Sie, dass, wenn Sie aus einem Speicherabbild debuggen, die Sie von WinQual abgerufen haben, dann wird es eine native Ausnahme sein, die ohnehin gefangen ist. Es ist fast immer möglich wieder auf den nativen Stack zu gehen und die verwaltete Ausnahme abrufen und wenn Sie Symbole zur Verfügung, es ist in der Regel einfach, herauszufinden, was schief gelaufen ist. Der Stack-Trace der verwalteten Ausnahme wird ohnehin in dieser Situation überflüssig.

Andere Tipps

Ja, aber wir sind in den Application.ThreadException globalen Handler, keine catch-Block, so dass wir nicht nur throw nennen, würden wir e.Exception werfen müssen.

Ja, wie Marc sagt, nur WERFEN verwenden und die ursprüngliche Ausnahme wird mit den Stack-Trace Informationen erhielten erneut geworfen werden.

Ein Wurf E wird die ganze Ausnahme-Stack immer wieder mit der ursprünglichen Stapelinformation verloren starten. Normalerweise ist dies nicht das, was Sie wollen.

Alternative können Sie eine neue Ausnahme auslösen und die ursprüngliche Ausnahme als innere Ausnahme hinzufügen. Dann ist Ihre neue Ausnahme zusätzliche Bits an Informationen hinzufügen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top