C# 写入堆栈跟踪

C# 写入堆栈跟踪,c#,exception,stack-trace,C#,Exception,Stack Trace,我可以在堆栈跟踪中抛出一些文本吗 我的应用程序已经控制了抛出的异常。但我想了解更多关于某些方法(参数)的信息 这个想法是做一些类似的事情 StackTrace.Insert (0, "argument:" + test); 我知道这不酷,但有可能吗?根据定义,堆栈跟踪是程序中当前执行点处活动堆栈帧的输出,通常通过异常访问 @David Yaw为您提供了向堆栈跟踪添加附加信息的正确方法,因为它会使异常堆栈冒泡。换言之,只有在异常导致自定义数据时,才应将其添加到堆栈跟踪中 创建一些可集中访问的列表

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

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

这个想法是做一些类似的事情

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

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

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

@David Yaw为您提供了向堆栈跟踪添加附加信息的正确方法,因为它会使异常堆栈冒泡。换言之,只有在异常导致自定义数据时,才应将其添加到堆栈跟踪中

创建一些可集中访问的列表集合来存储日志数据,或者按照David的建议使用适当的try/catch with exception冒泡

比如说

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
}

创建异常,并将参数放入。然后抛出异常…

只是为了补充@erikH的优秀答案:


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

这是否足够<代码>抛出新的InvalidOperationException(“argument1:+test+”,argument2:+test2)但它会停止我的方法,不是吗?解决方案是创建异常,并将参数放入?(然后抛出异常…)你的应用程序中有任何日志记录基础设施吗?编辑:这里没有特定于WPF的内容。这是一个答案,因为我的评论被认为是有用的,我认为这更像是一个答案,而不是一个评论。非常好。关键是抛出这个新创建的异常,否则StackTrace将不会被填充。