我能在堆栈跟踪中添加一些文本吗?
我的应用程序已经掌握了抛出的异常。但是希望对某些方法(参数)有更多信息。
想法是做类似于以下内容:
StackTrace.Insert (0, "argument:" + test);
我知道这不太酷,但是这是否可能呢?
我能在堆栈跟踪中添加一些文本吗?
我的应用程序已经掌握了抛出的异常。但是希望对某些方法(参数)有更多信息。
想法是做类似于以下内容:
StackTrace.Insert (0, "argument:" + test);
我知道这不太酷,但是这是否可能呢?
创建异常,并将参数放入数据字典属性中。然后抛出异常...
补充@erikH的出色答案:
除了使用Data
属性外,如果您需要异常链中可用的其他数据,则可以通过自定义异常来实现。除了自定义类型可以提供的元信息(CommunicationException
可能表示I/O问题,InvalidStateException
可能表示程序遇到无效状态等),你可以以自定义字段的形式向异常添加附加信息。当您需要类型安全性而Data
属性无法提供时,自定义字段特别有用。
根据定义,堆栈跟踪是程序中当前执行点处活动堆栈帧的输出,通常通过异常访问。
@David Yaw已经给出了向堆栈跟踪添加其他信息的正确方法,因为它会沿着异常堆栈向上传递。换句话说,只有在异常的结果时才应将自定义数据添加到堆栈跟踪中。
要么创建一些集中可访问的列表集合来存储日志数据,要么像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
}
throw new InvalidOperationException("argument1:" + test + ", argument2:" + test2);
- David Yaw