c# - 是否可以生成排除内部方法的 .NET 堆栈跟踪?

标签 c# exception stack-trace

有时,当 .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/

相关文章:

c# - 开发Unity增强现实vuforia应用并与原生android应用集成

java - 如何创建检查 int 范围、数字类型而不是 char 的异常?

exception - 部分函数的 F# 异常处理

Python,不带参数引发异常

c# - 当表达式的开头相同时,如何使用 Sprache 解析表达式

c# - 多线程 C# 应用程序中的惰性单例

.net - 关闭应用程序时调用New StackTrace block

javascript - 在 angularjs 中,我如何记录异常和堆栈跟踪,用户进入生产?

c# - 在AudioSource的输入处生成音频

python - 杀死 python 脚本并查看执行的最后一行