有时,当 .NET 类方法发生异常时,该方法本身在内部调用一堆其他方法,但错误发生在其中一个方法内部。这会导致堆栈跟踪变得臃肿且困惑,其中包含比需要的更多“无意义”的内容。有没有办法获得堆栈跟踪,该堆栈跟踪停止在导致错误的公共(public) .NET 方法处,而不是显示 .NET 方法的所有内部结构?
ADO.NET 的 ExecuteNonQuery() 就是一个例子。在内部,调用 5-6 个函数,并且直到第 6 个嵌套函数才会发生异常,因此堆栈跟踪显示了我们无法执行任何操作或关心的所有内部结构。如果它停在 ExecuteNonQuery() 处,那就更好更干净了,因为这是面向公众的 .NET 方法。
最佳答案
简短的回答是“不”,您无法更改 .NET 生成堆栈跟踪的方式。生成堆栈跟踪后,它会显示每个调用站点。但是,如果您想要一些自定义行为,则可以编写一些自定义代码来编辑生成的堆栈跟踪的输出。
要生成堆栈跟踪,请使用如下代码:
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
构造函数将生成堆栈跟踪数据,并且 .GetFrames()
会将方法返回给您。从那时起,您可以根据需要过滤它们(使用 stackFrame.GetMethod()
获取每个帧的方法信息 - 过滤它或将其添加到字符串输出的 StringBuilder
等)
引用:https://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace(v=vs.110).aspx
关于c# - 是否可以生成排除内部方法的 .NET 堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240952/