2012-04-11 5 views
0

Ich habe eine DLL-Bibliothek, die ich gebaut habe, um die Menge der Zwischenkopie Code von Projekt zu Projekt kopiert zu reduzieren. In der DLL läuft ein Timer, um über RPC die Verbindung zu unseren Maschinen aufrecht zu erhalten. Wenn ich mein Projekt debuggen und die RPC-Verbindung brechen, wirft mein Code ein disconnect-Ereignis aus der dll-Bibliothek und mein Hauptformular fängt das Ereignis ab und behandelt es entsprechend.unbehandelte Ausnahme von dll - zeigt nur in Release-Build

Jetzt, für die Freigabe bauen. Wenn ich die RPC-Verbindung aufbringe, wird eine unbehandelte Ausnahme aus der Bibliothek geworfen, die anscheinend nirgendwo anders abgefangen wird. Der seltsame Teil ist, dass der Code, der die Ausnahme auslöst, im Timer ist und die Aufrufe alle in try/catch-Blöcke eingeschlossen sind und der catch-Block die Ausnahme verschluckt und andere Aufräumarbeiten durchführt.

Ich bekomme nicht, wie im Debug-Modus alles in Ordnung ist, aber in der Veröffentlichung ist es nicht. Dieser Teil ergibt für mich keinen Sinn. Ich habe versucht, das Ausnahmeobjekt zu betrachten und eine behandelte Eigenschaft darauf zu setzen, aber es ist nicht verfügbar. Ist das normales Verhalten, was ich sehe?

Ich habe erst vor kurzem begonnen, zahlreiche Bibliotheken in meinen Projekten zu verwenden, um meine Lösungen besser getrimmt und einfacher zu verfolgen. Hoffentlich ist das kein Problem mit Bibliotheken, die ich nicht berücksichtigt habe.

+0

Sie müssen das Problem eingrenzen. Fügen Sie einige Protokollfunktionen hinzu, um herauszufinden, woher die Ausnahme stammt. – squelos

Antwort

2

Es gibt einige Arten von Ausnahmen, die nicht in einem Try-Catch im Freigabemodus abgefangen werden, beispielsweise solche, die in einem anderen Thread auftreten. Versuchen Sie, das Application.ThreadException Ereignis in Ihrem Hauptformular zu behandeln.

Sie können auch mit Application.CurrentDomain.UnhandledException umgehen, um sicherzustellen, dass alle nicht behandelten Ausnahmen abgefangen werden.

+0

Stellen Sie sicher, dass Sie auch an das Application.CurrentDomain.UnhandledException-Ereignis anhängen, wie im obigen Beispiel gezeigt. – davisoa

+0

An diese Ereignisse bin ich normalerweise nicht gebunden. Ich versuche es mal. Wenn dies eine threadbezogene Ausnahme ist, steuert der Debugger den Threadkontext und deshalb sehe ich ihn nicht, wenn ich den Code durchtrete? – TWood

+0

Nun, ich habe einen Handler für Threadexception hinzugefügt, aber mein Problem wurde immer noch nicht davon erfasst und der unbehandelte Ausnahme-Handler meine Anwendung ordnungsgemäß heruntergefahren. Um das Problem zu beheben, musste ich meine Klassen aus meiner DLL und zurück in mein Hauptprojekt verschieben. Dann konnte ich den Fehler jedes Mal abfangen, wenn er auftrat. – TWood

Verwandte Themen