2011-01-02 5 views
1

Ich teste eine .net 4 Anwendung auf einer Stock Windows-Installation und bekomme einen Absturz beim Start. Die "Problemdetails anzeigen" aus dem Fehlerdialog sagt mir, dass es eine System.IO.FileNotFoundException, aber zeigt die Ausnahme Daten nicht so habe ich keine Ahnung, welche Datei es versucht, zu laden.Wie bekomme ich Ausnahmedetails ohne Debugger?

Gibt es eine Möglichkeit, detailliertere Daten über die Ausnahme zu erhalten, ohne Visual Studio zu installieren?

+2

Ihr Problem sieht wie ein fehlendes Bibliotheks-/Abhängigkeitsproblem aus. Wenn dies der Fall ist, hat das Framework möglicherweise die Ausnahmedetails an das Windows-Ereignisprotokoll übergeben. Schauen Sie sich dort um. –

Antwort

1

schreiben Ereignishandler für AppDomain.CurrentDomain.UnhandledException. Protokollieren oder zeigen Sie den Wert von e.ExceptionObject.ToString() an, um die Ausnahmebedingungsnachricht und den Stack-Trace abzurufen.

+0

Ich habe alle obigen Vorschläge ausprobiert, aber ProcMon war sehr ausführlich und ich konnte nicht genau feststellen, was beim Laden fehlgeschlagen ist, während das Systemprotokoll sehr wenig zusätzliche Informationen lieferte und die fehlende Datei nicht identifizierte. Hooking Top-Level-Ausnahmen und deren Protokollierung war definitiv die einfachste Option. – Bicubic

1

Sie könnten ProcMon verwenden, um Ihre Anwendung zu überwachen, um herauszufinden, welche Datei sie zu finden versucht. (Wenn Sie Procmon starten, sollten Sie alles andere herausfiltern, bevor Sie Ihre App starten)

1

Sie können auch versuchen, das Windows-Ereignisprotokoll anzuzeigen. Zum Beispiel fand eine schnelle Suche auf meiner Maschine die folgenden Fehler von MetroTwit (a .NET Twitter-Client):

Application: MetroTwit.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.InvalidOperationException 
Stack: 
    at System.Windows.Application.GetResourcePackage(System.Uri) 
    at System.Windows.Application.LoadComponent(System.Object, System.Uri) 
    at MetroTwit.View.ErrorView.InitializeComponent() 
    at MetroTwit.View.ErrorView..ctor(System.String) 
    at MetroTwit.App.Application_DispatcherUnhandledException(System.Object,  System.Windows.Threading.DispatcherUnhandledExceptionEventArgs) 
    at System.Windows.Threading.Dispatcher.CatchException(System.Exception) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object,   
    System.Delegate, System.Object, Int32, System.Delegate) 
    at System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate, System.Object, 
    Int32, System.Delegate) 
    at System.Windows.Threading.Dispatcher.InvokeImpl(
    System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, 
    System.Object, Int32) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) 
    at System.Windows.Threading.Dispatcher.PushFrameImpl(
    System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Application.RunInternal(System.Windows.Window) 
    at System.Windows.Application.Run() 
    at MetroTwit.App.Main() 

Die Fehlerebene waren Fehler und die Quelle war „.NET Runtime“

+0

Dies ist nicht automatisch, Sie müssen den Code schreiben. –

+0

Es * ist * automatisch und sehr nützlich auch. –

+0

Es ist automatisch, aber die meisten Details der Ausnahme werden nicht protokolliert. Wie auch immer Sie wollen nur einen Stack-Trace das ist definitiv ein schneller und einfacher Weg! – Bicubic

Verwandte Themen