2013-06-05 11 views
5

Ho un progetto su WinForms con questo codice:WinRt. Gestore UnhandledException. StackTrace è nullo

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException; 

private void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e) 
{   } 

Il e.ExceptionObject contiene pieno StackTrace.

In Win progetto Store:

this.UnhandledException += (s, e) =>{            
{            
    MarkedUp.AnalyticClient.LogLastChanceException(e); 
}; 

e.Exception.StackTrace è nullo.

Entrambe le eccezioni sono stati generati da questo codice:

int a=0; 
.... 

try 
{ 
    int i = 1/a; 
} 
catch (Exception exp) 
{ 
    throw; 
} 

tutte le idee?

risposta

1

Il riferimento MSDN suggerisce che questa è una limitazione: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.unhandledexception

Una limitazione importante è che gli argomenti dell'evento UnhandledException non contengono più dettagliatamente l'eccezione originale come propagato dal codice dell'app. Ogni volta che è possibile, se l'app richiede un'elaborazione specifica di una determinata eccezione, è sempre meglio catturare l'eccezione mentre si propaga, poiché saranno disponibili ulteriori dettagli. Gli argomenti evento UnhandledException espongono un oggetto eccezione tramite la proprietà Exception. Tuttavia, il tipo, il messaggio e la traccia dello stack di questo oggetto eccezione non sono garantiti per corrispondere a quelli dell'eccezione originale che è stata sollevata. Gli argomenti dell'evento espongono una proprietà Message. Nella maggior parte dei casi, questo conterrà il messaggio dell'eccezione originariamente sollevata.

1

Si sta eseguendo la soluzione in modalità Debug? Sembra che stia accadendo qualcosa nel file App.g.i.cs quando si esegue la soluzione in modalità Debug. Quando eseguo il campione in modalità Release, lo stacktrace è disponibile nell'evento UnhandledException.

Nella mia soluzione di prova si rompe prima qui:

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

E dopo che uno va al gestore UnhandledException che ho definito nel file app.xaml.cs. In Debug lo stacktrace è scomparso, in modalità Release lo stacktrace ei dettagli delle eccezioni sono lì.