Отключить перенос исключений WPF для отладки

#c# #wpf #debugging #exception

#c# #wpf #отладка #исключение

Вопрос:

Есть ли способ отключить очень раздражающий перенос исключений WPF при отладке?

Примером может служить окно, которому принадлежит текстовое поле, текстовое поле привязано к свойству, средство получения этого свойства выдает исключение, которое не может быть обработано средой представления (например, создать StackOverflowException() ) .

То, что я должен видеть, это

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

Вместо этого я вижу…

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

Из-за переноса исключений WPF это исключение также иногда перехватывается и отправляется, а затем либо повторно отбрасывается, либо скрывается глубоко внутри MS Internals и невозможно вернуться к фактическому месту исключения. В результате мы видим гигантский набор вызовов PresentationFramework.dll , PresentationCore.dll , и WindowsBase.dll но НИКАКОГО пользовательского кода, кроме App.Main().

Это происходит во время привязки, событий, вызываемых во время создания, и других совершенно случайных ситуаций без рифмы или причины (исключение во время нажатия кнопки иногда делает это со мной). Теперь да, я могу посмотреть трассировку стека внутри исключения, но эта трассировка стека также в значительной степени бессмысленна, потому что я не могу вернуться к этому фрейму, чтобы увидеть, какие переменные существуют во время броска.

Комментарии:

1. 1. Я вижу это все время — если конструктор моего окна выдает исключение, мне приходится копаться в двух уровнях InnerExceptions, чтобы выяснить, какова была фактическая ошибка.

Ответ №1:

Обычно при отладке я бы использовал debug -> exceptions и выбирал thrown для исключений Common Language Runtime. Затем это остановится в тот момент, когда генерируется исключение.

Диалоговое окно исключений Visual Studio 2010 с отмеченными исключениями common language runtime

Комментарии:

1. Хотя это решение действительно работает, оно точно не решает конкретную проблему WPF. Теперь я вынужден видеть все исключения, даже если они перехвачены, что может быть настоящим кошмаром, если я использую другую третью библиотеку, которая внутренне генерирует и улавливает неизвестно по какой причине. То, что я ищу, — это способ видеть только неперехваченные исключения, которые WPF улавливает / повторно собирает, отправляет на прослушиватели отладки или иным образом скрывает.