gpt4 book ai didi

c# - 获取抛出异常的方法名

转载 作者:可可西里 更新时间:2023-11-01 02:59:26 24 4
gpt4 key购买 nike

我知道。已经有人问过类似的问题。

但我还没有从中得到确切的解决方案。

我有一个按钮单击事件,其中有一个方法 FillCombo()

按钮点击事件

private void button1_Click(object sender, EventArgs e)
{
try
{
cmbTemplates.Items.Clear();
lstFiles.Clear();
FillCombo();
}
catch (Exception ex)
{
MethodBase site = ex.TargetSite;
Log(ex.ToString(), site == null ? null : site.Name);
}
}

调试时,发现异常发生在FillCombo()方法。之后,我将 site.Name 的值作为 WinIOError 而不是 FillCombo

我尝试了另一种方法 GetExecutingMethodName()Chris GesslerHow to get the name of the method that caused the exception 中回答了这个问题题。所以我尝试使用 GetExecutingMethodName() 方法发送导致异常的方法的名称

Log(ex.ToString(), GetExecutingMethodName());

但我得到的结果是 System.Windows.Forms.Control.OnClick 而不是 FillCombo

如何获取导致异常的方法的实际名称?

最佳答案

.net 支持从异常中获取堆栈跟踪信息。您可以通过检查第一帧(来源)来过滤掉方法(及其名称)。

new StackTrace(ex).GetFrame(0).GetMethod().Name

这可能会为您提供与目标站点(win io)完全相同的结果,但您可以检查第一个用户代码的堆栈跟踪,或您类型中的第一帧,或任何您需要的内容。

例如,获取当前程序集中的罪魁祸首的名称:

var s = new StackTrace(ex);
var thisasm = Assembly.GetExecutingAssembly();
var methodname = s.GetFrames().Select(f => f.GetMethod()).First(m => m.Module.Assembly == thisasm).Name;

关于c# - 获取抛出异常的方法名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27997276/

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