从引发的异常中获取特定信息

时间:2019-12-12 15:49:55

标签: c# .net exception stack-trace system.diagnostics

让我们考虑一下我们在代码中抛出了一个Exception ex。现在,在捕获主体中,我想访问六项信息:

  1. 解决方案名称
  2. 项目名称
  3. 名称空间名称
  4. 文件名
  5. 方法名称
  6. 行号

我已经知道的是使用

System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(e, true);

我可以访问其中一些信息(文件的完整路径,行号等)。但是,这些信息并不是我所需要的。例如,我不知道如何从跟踪中提取解决方案名称或名称空间名称。显然,也不是要解析文件的路径,因为不同的错误可能具有多层文件和文件夹层次结构,并且一个全局规则不能解决所有错误。

我想知道有什么方法可以通过编程方式访问这些信息吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

很可能您将无法获得理想的东西,但是我将分享一些您可能不了解或考虑的工具和想法:

  1. 有一些属性(CallerFilePathAttributeCallerLineNumberAttributeCallerMemberNameAttribute,当添加到可选方法参数中时,它们将导致编译器根据上下文自动插入默认值您可以创建具有此类属性的帮助程序方法来捕获所需的信息。
  2. 有诸如Fody之类的工具,称为“ IL Weavers”,可以在主要编译过程之后运行,并以特定方式更改已编译的代码。例如,您的代码可以编写为对一个方法的简单调用,但是在编译时,编织者可以更改代码以创建一堆上下文信息,并将其传递给日志记录方法。
  3. 如果组织得很好,通常可以确保名称空间,类和方法(全部作为堆栈跟踪的一部分捕获)具有足够的信息,可以用来猜测解决方案,项目和文件。名称。
  4. 捕获异常时,通常希望记录发生的事件并以特定方式处理该异常,或者只是将异常包装到具有更多上下文信息的另一个异常中。如果选择后者,则名称空间,类和方法名称将包含在引发的异常的堆栈跟踪中。因此,当它进一步记录到堆栈中时,您将可以访问该数据。