2016-05-20 10 views
2

ich auf der UWP Anwendung arbeitete. Und ich benutze async/erwarte viel. Immer wenn eine Ausnahme auftritt in meinem Code, die Debugger Satz Pause in App.g.i.csAusnahmen debuggen mit async und UWP

#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION 
      UnhandledException += (sender, e) => 
      { 
       if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break(); 
      }; 
#endif 

Aber ich will die Linie sehen, wenn die Ausnahme aufgetreten ist. Wie erreiche ich dieses Verhalten?

+0

Sie müßten die Ausnahme behandeln, wo sie geworfen wird. Zum Beispiel ein Versuch zu fangen? Nicht sicher, welche Antwort Sie hier suchen – Default

+0

Möglicherweise ist das eine XAML-Ausnahme. – Janak

+0

@Default, ist das Problem, ich weiß nicht, wo es ausgelöst wird, und ich möchte debuger es für mich zeigen)) –

Antwort

4

die folgende Methode, um Ihre App Klasse hinzufügen:

private static void UnhandledError(object sender, UnhandledErrorDetectedEventArgs eventArgs) 
{ 
    try 
    { 
     // A breakpoint here is generally uninformative 
     eventArgs.UnhandledError.Propagate(); 
    } 
    catch (Exception e) 
    { 
     // Set a breakpoint here: 
     Debug.WriteLine("Error: {0}", e); 
     throw; 
    } 
} 

In Ihrem App Konstruktor:

public UnitTestApp() 
{ 
    CoreApplication.UnhandledErrorDetected += UnhandledError; 

    // ...and any other initialization. 
    // The InitializeComponent call just sets up error handlers, 
    // and you can probably do without in the case of the App class. 

    // This can be useful for debugging XAML: 
    DebugSettings.IsBindingTracingEnabled = true; 
    DebugSettings.BindingFailed += 
     (sender, args) => Debug.WriteLine(args.Message); 

} 

Es gibt immer noch Fälle, in denen Sie nicht über einen guten Stack-Trace bekommen, aber das ist oft hilfreich.

Ein weiterer Ansatz ist zu brechen, wenn eine Ausnahme ausgelöst wird (über Debug, Windows-, Exception Einstellungen).

+0

Vielen Dank, es ist sehr nützlich! Aber warum kann der Debugger die Pause nicht auf die erwartete Zeile setzen? –

+0

Weisen Sie Visual Studio an, zu brechen, wenn (alle oder eine bestimmte) Ausnahme ausgelöst wird. Der Stack-Trace liefert die Methode, aber nicht die Zeile. –

+0

Ja! Ich habe alle Common Language Runtime Ausnahmen überprüft und es funktioniert nicht! Vielen Dank. –