用stacktrace写

时间:2012-09-25 19:11:34

标签: c# exception stack-trace

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

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

想法就是做

之类的事情
StackTrace.Insert (0, "argument:" + test);

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

3 个答案:

答案 0 :(得分:13)

创建例外,并将参数放在Data dictionary property中。然后抛出异常......

答案 1 :(得分:5)

只是为了添加@ erikH的优秀答案:

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

答案 2 :(得分:2)

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

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

创建一些可集中访问的List集合来存储日志记录数据,或者使用正确的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
}