有时,当.NET类方法发生异常时,该方法本身在内部调用一组其他方法,但错误发生在其中一种方法中。这就造成了一个臃肿和混乱的堆栈跟踪,比需要的“无意义”的东西更多。是否有一种方法可以获得一个堆栈跟踪,该跟踪停止于导致错误的公共.NET方法,而不是让它显示.NET方法的所有内部?
这方面的一个例子是ADO.NET的ExecuteNonQuery()。在内部,调用类似于5-6个函数,在第6个嵌套函数之前,异常可能不会发生,因此堆栈跟踪显示了所有我们无法处理或关心的内部元素。如果它停止在ExecuteNonQuery()处,那么它会更干净,因为这是面向.NET方法的公共方法。
发布于 2017-09-15 13:46:18
简单地说,“不行”,您不能改变.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
https://stackoverflow.com/questions/46240952
复制相似问题