gpt4 book ai didi

c# - 为什么处理 Action 的方法中的 catch 会截断堆栈跟踪?

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

考虑这个小程序。如果您愿意,请忽略通用捕获,我已将其保持简短以尝试说明这一点:

private static void Main(string[] args)
{
Try(Fail);
}

private static void Fail()
{
var x = ((string)null).Clone();
}

private static void Try(Action action)
{
try
{
action();
}
catch (Exception exc)
{
Debug.WriteLine(exc.StackTrace);
}
}

运行时,生成以下内容(删除了一些路径信息):

at Scratch.Program.Fail() in Program.cs:line 27
at Scratch.Program.Try(Action action) in Program.cs:line 34

我的问题是 - 为什么异常的堆栈跟踪在 Try() 方法处停止展开方法链?我希望它能够通过 Main() 方法展开。

我还没有找到任何关于阻止异常展开超过 Try() 的文档 - 所以我想了解这一点。

最佳答案

这个:

try
{
action();
}
catch (Exception exc)
{
Debug.WriteLine(exc.StackTrace);
}

Try 中捕获您的异常,并且不会向上传播以展开调用堆栈,它只是吞下异常。因此,您不会将 Main 视为堆栈跟踪的一部分。如果您想查看 Main,请将 catch 留给您的 Main 方法:

public static void Main(string[] args)
{
try
{
Try(Fail);
}
catch (Exception e)
{
}
}

现在你看到了:

at ConsoleApplication2.Program.Fail() in C:\Users\Yuval\documents\visual studio 14\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:line 25 at ConsoleApplication2.Program.Try(Action action) in C:\Users\Yuval\documents\visual studio 14\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:line 30 at ConsoleApplication2.Program.Main(String[] args) in C:\Users\Yuval\documents\visual studio 14\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:line 15

关于c# - 为什么处理 Action 的方法中的 catch 会截断堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973669/

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