8

我可以在堆栈跟踪中抛出一些文本吗?

我的应用程序已经掌握了抛出的异常。但想了解更多有关某些方法(参数)的信息。

这个想法是做类似的事情

StackTrace.Insert (0, "argument:" + test);

我知道这并不酷,但有可能吗?

4

3 回答 3

13

创建异常,并将参数放在数据字典属性中。然后抛出异常...

于 2012-09-25T19:57:59.900 回答
5

只是为了添加到@erikH 的出色答案:

除了使用该Data属性之外,如果您需要异常链上的其他可用数据,您可以通过自定义异常来实现。除了自定义类型可以提供的元信息(CommunicationException可能意味着 I/O 问题,InvalidStateException可能意味着程序遇到无效状态等)之外,您还可以向异常添加附加信息,其形式为自定义字段。当您需要Data属性不提供的类型安全时,自定义字段特别有用。

于 2012-09-25T20:04:52.477 回答
2

根据定义,堆栈跟踪是程序中当前执行点的活动堆栈帧的输出,通常通过异常访问。

@David Yaw 为您提供了将附加信息添加到堆栈跟踪的正确方法,因为它会使异常堆栈冒泡。换句话说,您应该只将自定义数据添加到堆栈跟踪,当它是异常的结果时。

要么创建一些可集中访问的 List 集合来存储日志数据,要么按照 David 的建议使用适当的 try/catch 和异常冒泡。

例如。

try
{
  doSomethingThatMightFailAndThrowAnException();
}
catch (Exception ex)
{
  throw new Exception("Here is some custom data to add to the trace...",ex);
  // Notice adding the ex as the second parameter preserves the original exception trace
}
于 2012-09-25T19:39:21.353 回答