Что контролирует политику UnhandledException по умолчанию в WinForms? - PullRequest
6 голосов
/ 04 сентября 2011

В настоящее время я поддерживаю приложение WinForms, которое прослушивает событие Application.ThreadException, чтобы перехватывать необработанные исключения в потоках GUI.

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

Я могу сделать поведение согласованным, явно установивполитика, подобная этой:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

Но мне любопытно узнать, что контролирует политику по умолчанию.MSDN делает смутные намеки на «файл конфигурации приложения», но в нашем app.config или любом другом файле конфигурации, о котором я знаю, такой настройки политики нет.

В чем причина этого противоречивого поведения?

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

Есть только один, о котором я могу думать.Логика обработки исключений знает, подключен ли отладчик.Это имеет значение, когда действует значение UnhandledExceptionMode.Automatic по умолчанию.Когда отладчик подключен, цикл сообщений Winforms не пытается перехватить исключения.Что довольно важно, это затруднит отладку исключений.Отладчик только включается и отображает Помощник по исключениям, когда исключение не обработано.

Использование UnhandledExceptionMode.CatchException - это нормально, это делает согласованную обработку исключений.Другими словами, он будет вести себя на вашем компьютере разработчика точно так же, как на компьютере вашего клиента.Но теперь вам понадобится Debug + Exceptions, Throw box для устранения проблем с кодом.Это всегда останавливает отладчик при возникновении исключения, независимо от того, перехвачено оно или нет.

0 голосов
/ 03 января 2012

Я тоже начал испытывать это.Мы пытались отладить исключения, которые видели наши тестеры и не могли воспроизвести на наших собственных машинах.Я включил поведение остановки на исключениях в VS и альте, исключения действительно происходили.Однако, если бы я продолжил F11, я бы увидел, что исключения просто молча игнорируются.

У меня есть две машины.Одна машина - Win 7 64 bit, на ней установлены VS 2008 и VS 2010, и, таким образом, установлена ​​.Net 4.0.Приложение, которое мы тестируем, - .Net 3.5 и отлажено в VS 2008.

Другая машина - 32-битная Win XP, обычный jane VS 2008 и .Net 3.5.

Машина Win 7молча игнорирует.Машина XP громко жалуется.Я думаю, что .Net 4.0 изменил некоторые политики по умолчанию.

Я обошел это, позвонив

Application.SetUnhandledExceptionMode( UnhandledExceptionMode.CatchException );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...