2013-06-05 11 views
5

Mam projekt na WinForms z tym kodem:WinRt. Nieobsługiwany uchwyt wyjątków. StackTrace jest null

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException; 

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

e.ExceptionObject zawiera pełną StackTrace.

In Win projektu Store:

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

e.Exception.StackTrace jest null.

Oba były wyjątki generowane przez ten kod:

int a=0; 
.... 

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

jakieś pomysły?

Odpowiedz

1

Odniesienie na MSDN sugeruje, że jest to ograniczenie: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.unhandledexception

Znaczącym ograniczeniem jest to, że argumenty zdarzeń UnhandledException nie zawierać jak najwięcej szczegółów oryginalnego wyjątku jako propagowane z kodu aplikacji. Gdy tylko jest to możliwe, jeśli aplikacja wymaga określonego przetwarzania określonego wyjątku, zawsze lepiej jest wychwycić wyjątek podczas propagacji, ponieważ wtedy będzie dostępnych więcej szczegółów. Argumenty zdarzenia UnhandledException wystawiają obiekt wyjątku za pośrednictwem właściwości Exception. Jednak typ, komunikat i ślad stosu tego obiektu wyjątku nie gwarantują zgodności z oryginalnym zgłoszonym wyjątkiem. Argumenty zdarzenia ujawniają właściwość Message. W większości przypadków będzie to zawierało komunikat o pierwotnie podniesionym wyjątku.

1

Czy używasz rozwiązania w trybie debugowania? Wydaje się, że dzieje się coś w pliku App.g.i.cs po uruchomieniu rozwiązania w trybie debugowania. Po uruchomieniu próbki w trybie Release, stacktrace jest dostępny w zdarzeniu UnhandledException.

W moim badanego roztworu pęknie pierwszy tutaj:

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

a potem jeden idzie do obsługi UnhandledException że mam zdefiniowanej w pliku app.xaml.cs. W debugowaniu brak ścieżki stosu, w trybie Release znajduje się stacktrace i szczegóły wyjątku.

Powiązane problemy