gpt4 book ai didi

c# - 当引发异常时返回堆栈跟踪时,C# 尾递归优化如何可能

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

我看到一些关于 C# 中缺少尾调用优化的问题,据说这使得该语言不适合递归算法实现。然而,这引出了一个问题,即我们如何进行尾调用优化,并在引发异常时或何时可以使用反射来检查调用堆栈并对其采取行动时仍然提供合理的堆栈跟踪。

最佳答案

好吧,只有当您希望获得准确的堆栈跟踪时,它才重要:)

尾调用优化并不是唯一可以破坏堆栈跟踪的东西 - 最简单的例子是内联,它肯定会影响事情。基本上,任何依赖准确的堆栈跟踪的东西都会冒一点风险。

下面是这个问题的一个非常简单的例子:

using System;
using System.Runtime.CompilerServices;

class Program
{
static void Main(string[] args)
{
try
{
Call1();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
}

static void Call1()
{
Call2();
}

static void Call2()
{
Call3();
}

[MethodImpl(MethodImplOptions.NoInlining)]
static void Call3()
{
Call4();
}

static void Call4()
{
Call5();
}

static void Call5()
{
throw new Exception();
}
}

在没有调试器的情况下构建并运行,你可能会得到:

at Program.Call3()
at Program.Main(String[] args)

基本上,请小心处理堆栈跟踪。

关于c# - 当引发异常时返回堆栈跟踪时,C# 尾递归优化如何可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992172/

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