我可以在堆栈跟踪中抛出一些文本吗?
我的应用程序已经掌握了抛出的异常。但是想了解一些方法(参数)的更多信息。
想法就是做
之类的事情StackTrace.Insert (0, "argument:" + test);
我知道这不酷,但有可能吗?
答案 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
}