gpt4 book ai didi

c# - 已内联的函数的堆栈跟踪是否在抛出的异常中保留?

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

Release 模式下编译可执行文件时 - 启用代码优化 - 编译器可能会选择内联满足特定条件的函数以提高性能。

我的问题是:当一个已经被内联的函数体抛出异常时,stacktrace信息是否会被保留而不考虑内联展开?也就是说,会不会显示原始函数作为错误源,还是会显示调用函数?

最佳答案

这取决于抛出异常的方式。如果你使用 throw 语句那么你没有问题,抖动不会内联包含 throw 的方法。顺便说一句,当您需要快速设置属性时需要注意一些事情。

但是,如果异常是由正常执行引起的,例如 NullReferenceException 或 IndexOutOfRangeException 等,那么是的,如果方法是内联的,您不会在堆栈跟踪中看到它的名称。这可能有点令人困惑,但您通常可以从调用方法的源代码和异常类型中弄清楚。希望它相对较小。 [MethodImpl(MethodImplOptions.NoInlining)] 属性可用于抑制内联。当您发现它会有帮助时,通常为时已晚;)

关于c# - 已内联的函数的堆栈跟踪是否在抛出的异常中保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225169/

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