gpt4 book ai didi

c# - 为什么 Visual Studio 在调试 UnhandledException 事件时循环

转载 作者:太空狗 更新时间:2023-10-29 18:22:22 25 4
gpt4 key购买 nike

(这看起来与 C# UnhandledException from another thread keeps looping 非常相似,但我并不想在这里捕获异常,只是有机会记录一些东西)

我有一些非常简单的 C# 代码,用于设置 UnhandledException 事件处理程序,然后抛出异常:

class Program
{
static void Main(string[] args)
{
AppDomain currentDomain = AppDomain.CurrentDomain;
//currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);

currentDomain.UnhandledException += (sender, eventArgs) =>
{
var exception = (Exception) eventArgs.ExceptionObject;

Console.WriteLine("Unhandled exception: " + exception.Message);
};

throw new AccessViolationException("Bleurgh");
}
}

它的行为符合我对控制台的预期:

Unhandled exception: Bleurgh
Unhandled Exception: System.AccessViolationException: Bleurgh
at UnhandledExceptions.Program.Main(String[] args) in c:\code\sandbox\UnhandledExceptions\UnhandledExceptions\Program.cs:line 20

但是当我尝试在 Visual Studio 中调试它时,它进入了一个循环,进入事件处理程序然后退出以重新抛出异常。

当我将处理程序表示为不同的静态方法时,会发生同样的事情。

有什么想法吗?

这是在 Visual Studio 2010 中。编辑:和 .NET 4。

最佳答案

这似乎取决于 ExceptionAssistant 的行为具体来说。当您继续时,助手会将调用堆栈展开到抛出异常的点——这会导致异常被重新抛出。我假设这是为了允许您进行更改以避免异常。

如果在 Tools\Options\Debugger\General 下取消选中“Unwind the call stack on unhandled exceptions”,那么它的行为就像一个独立的进程一样,你会看到进程终止。

关于c# - 为什么 Visual Studio 在调试 UnhandledException 事件时循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com