Gibt es eine Möglichkeit, Erste-Chance-Ausnahmen zu protokollieren oder abzufangen?

7

Gibt es, bevor Sie einen Profiler verwenden, einen Weg in ein laufendes Programm, um erste Ausnahmen zu erkennen? Im Idealfall möchte ich detailliertere Statusinformationen aufzeichnen, die nicht verfügbar sind, nachdem der catch-Block die letzte Ausnahme übernommen hat.

    
Brian Adams 02.11.2008, 05:15
quelle

3 Antworten

16

Ich habe FirstChanceException gegoogelt, und ich kann nicht widerstehen, dies mehr als zwei Jahre später zu beantworten ...

Nun können Sie in .net 4.0 die FirstChanceException abfangen Ereignis der AppDomain. Es ist nur ein Ereignis, daher können Sie den Fehler nicht behandeln, aber es scheint eine gute, zentrale Möglichkeit zu sein, Informationen über Ausnahmen zu erhalten, unabhängig davon, ob sie behandelt werden oder nicht. Das FirstChanceException-Ereignis wird ausgelöst, bevor ein catch-Block es verarbeiten darf. Ich habe nicht viele Informationen darüber gefunden, aber abgesehen von der Microsoft-Dokumentation ist eine der besseren Quellen Mitch-Verkäufer-Blog .

    
jlnorsworthy 29.01.2011 00:15
quelle
2

Ich denke, die einzige Möglichkeit, diese Informationen in .NET zu bekommen, ist die Verwendung eines Debuggers.

Andernfalls müssen Sie selbst eine Lösung entwickeln, um den Status eines Stackframes zu speichern und eine spezielle Möglichkeit zum Protokollieren von Ausnahmen zu haben. Sie würden im Grunde die gleichen Dinge tun, die ein Speicherprofiler macht, verfolgen Sie die Instanzen, die erstellt werden. Dies wäre jedoch ein enormer Leistungseinbruch, es sei denn, Sie beschränken die Menge der Informationen, die Sie protokollieren.

Eine bessere Lösung wäre, die Trace- und Assert-Funktionen im System.Diagnostics-Namespace zu verwenden, um den Programmstatus selektiv zu verfolgen oder eine Protokollierungsfunktion (log4net, EnterpriseLibrary, NLog, eigene einfache) zu verwenden, um Thread zu dumpen / stack / Variable Informationen wie Sie gehen.

In jedem Fall ist das Hinzufügen all dieser zusätzlichen Informationen ein großer Aufwand.

EDIT: Ich habe Neuigkeiten von diesem Projekt in meinem Feed: NTrace . Es sieht so aus, als ob es etwas mehr von dem, was Sie versuchen, passen würde.

    
Garo Yeriazarian 03.11.2008 02:45
quelle
1

Verwenden Sie Adplus . Es fügt dem Prozess einen Debugger hinzu und erzeugt (standardmäßig) einen kleinen Minidump, wenn die erste Exception ausgelöst wird. Die von Adplus generierte Protokolldatei enthält außerdem Informationen zur Ausnahmebedingung. Stellen Sie nur sicher, dass Sie PDB's haben, um vollständige Calstack-Informationen zu sehen.

    
Tal 06.11.2008 12:31
quelle

Tags und Links