Необработанное исключение в приложении Winforms - PullRequest
6 голосов
/ 19 февраля 2011

У меня есть простое приложение WinForms, которое используется для ввода тестовых случаев.С тех пор, как я обновил это приложение до .NET 4.0 и добавил новую вкладку в элемент управления вкладки для проверки XML по схеме XSD, приложение случайно зависало.Мне не удалось воспроизвести исключение.

Ошибка, которую получает мой сотрудник по обеспечению качества, - это общее сообщение Windows:

TestCaseViewer столкнулся с проблемой и должен быть закрыт.Приносим извинения за неудобства.

Чтобы попытаться добраться до настоящей ошибки, я добавил следующий код в начало метода Main программы:

        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        Application.ThreadException += Application_ThreadException;

Обработчики событийвыглядят так:

    static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        try
        {
            MessageBox.Show(e.Exception.ToString(), @"Thread Exception", 
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        finally 
        {
            Application.Exit();    
        }
    }

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        try
        {
            var ex = (Exception)e.ExceptionObject;
            MessageBox.Show(ex.ToString(), @"Unhandled Exception",
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        finally 
        {
            Application.Exit();    
        }
    }

К сожалению, это не помогло, и что бы ни выглядело, ошибка продолжает поступать так, что генерирует необработанную ошибку, которая всплывает в ОС.* Кто-нибудь может дать мне какие-нибудь другие идеи насчет ловли этого исключения?

Ответы [ 2 ]

10 голосов
/ 12 марта 2013

Попробуйте добавить следующее в ваш app.config

<runtime>
   <!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
   <legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
2 голосов
/ 19 февраля 2011

Если вы используете Visual Studio, вы можете установить его на все необработанные исключения и даже в любое время, когда исключение выбрасывается , независимо от того, является ли онообрабатывается вашим кодом.

Для этого выберите «Исключения» в меню «Отладка».Вы получите диалоговое окно, которое выглядит следующим образом:

Visual Studio Exceptions dialog

Если вы действительно хотите стать серьезным, попробуйте установить все флажки.Затем выясните у своего специалиста по обеспечению качества, что именно делается для запуска исключения, и точно воспроизведите эти действия во время работы под отладчиком в среде разработки.Всякий раз, когда генерируется исключение, Visual Studio будет прерываться, и вы увидите строку кода с ошибками вместе с полной трассировкой стека.

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