Асинхронные исключения .NET - PullRequest
0 голосов
/ 28 июля 2011

У меня проблема с приложением .NET. Он заканчивается без каких-либо исключений. Если я запускаю его в режиме отладки в моей Visual Studio, отладка также прекращается без какого-либо сообщения об ошибке.

Я обнаружил сообщение StackOverflowException в .NET , которое описывает, что это происходит, когда CLR выдает одно из следующих исключений:
- ThreadAbortException
- OutOfMemoryException
- StackOverflowException

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

Я попытался написать второе приложение, которое запускает другое приложение в отдельном процессе. При таком подходе я мог определить, когда процесс завершился, но единственной информацией, которую я мог получить таким образом, был код выхода -532459699. Кто-нибудь знает, что это значит?

Ответы [ 3 ]

0 голосов
/ 28 июля 2011

Вы настраивали отладчик Visual Studio для перехвата всех исключений? Если нет, перейдите в раздел «Отладка / Исключения ...» и установите флажок под брошенным столбцом рядом с Общими исключениями времени выполнения языка

0 голосов
/ 28 июля 2011

Обработка исключений домена на главной в программе:

AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException;

//Add these too if you are in windows forms application
Application.ThreadException += OnApplication_ThreadException;

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

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

private static void OnCurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
#if DEBUG
    System.Diagnostics.Debugger.Break();//we will break here if we are in debug mode.
#endif//DEBUG

    LogException(e);
    RestartTheApplication();    
}
0 голосов
/ 28 июля 2011

Попробуйте установить Visual Studio -> Debug -> Exceptions -> CLR Exceptions

...