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

在发布模式下编译可执行文件时 – 启用代码优化 – 编译器可以选择内联满足特定条件的函数以提高性能.

我的问题是:当内联函数体中抛出异常时,无论内联扩展如何,都会保留堆栈跟踪信息吗?换句话说,它会将原始函数显示为错误源,还是会显示调用函数?

解决方法

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

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...