2011-11-01 16 views
6

Czy istnieje sposób wyłączenia bardzo irytującego zawijania wyjątków WPF podczas debugowania?Wyłączanie zawijania wyjątków WPF w celu debugowania

Przykładem może być okno posiadające pole tekstowe, pole tekstowe jest powiązane z właściwością, getter na tej właściwości zgłasza wyjątek, który nie może być obsłużony przez strukturę prezentacji (throw new StackOverflowException() for przykład).

Co ja powinien być wyświetlany jest

 get 
     { 
      throw new StackOverflowException(); // < Exception happened here 
     } 

Zamiast tego co widzę jest ...

No Source Available 
    Call Stack Location: 
    PresentationFramework.dll!MS.Internal.Data.PropertyPathWorker.RawValue(int k) + 0x64 bytes 

powodu zawijania wyjątek WPF za wyjątek ten jest także czasami złapany i wysłany następnie jest ponownie zgłaszane lub ukryte głęboko w MS.Internals i niemożliwe do powrotu do rzeczywistej witryny wyjątku. Powoduje to, że widzimy gigantyczny zestaw wywołań PresentationFramework.dll, PresentationCore.dll i WindowsBase.dll, ale nie ma kodu użytkownika z wyjątkiem App.Main().

Występuje podczas bindowania, zdarzeń wywoływanych podczas tworzenia i innych zupełnie przypadkowych sytuacji bez rymów i przyczyn (wyjątek podczas kliknięcia przycisku czasami mi to robi). Teraz tak mogę spojrzeć na stos śledzenia wewnątrz wyjątku, ale ten ślad stosu jest również prawie bez znaczenia, ponieważ nie mogę wrócić do tej ramki, aby zobaczyć, jakie są zmienne w momencie rzutu.

+0

+1. Widzę to cały czas - jeśli konstruktor mojego okna zgłasza wyjątek, muszę przekopać się na dwa poziomy InnerExceptions, aby dowiedzieć się, jaki był faktyczny błąd. –

Odpowiedz

3

Ogólnie podczas debugowania użyłbym debug -> wyjątki i wybierz wyrzucony dla wyjątków Runtime Common Language. Zostanie to zatrzymane w momencie, w którym zgłoszony zostanie wyjątek.

Visual Studio 2010 Exceptions dialog with common language runtime exceptions ticked

+1

Chociaż to rozwiązanie działa, nie rozwiązuje dokładnie określonego problemu WPF. Teraz jestem zmuszony zobaczyć wszystkie wyjątki, nawet jeśli zostaną złapani, co może być prawdziwym koszmarem, jeśli używam innej biblioteki, która wewnętrznie rzuca i łapie, kto wie, dlaczego. To, czego szukam, to sposób na zobaczenie tylko niezłapanych wyjątków, które WPF łapie/ponownie rzuca, wysyła do debugowania słuchaczy lub w inny sposób zaciemnia. – NtscCobalt

Powiązane problemy