Answers:
看一下System.Diagnostics
名称空间。里面有很多东西!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
兜一圈学习引擎盖下的情况,这真的很好。
我建议您看看可以实现您的目的的日志记录解决方案(例如NLog,log4net或Microsoft模式和实践企业库)。祝你好运!
一种替代方法System.Diagnostics.StackTrace
是使用System.Environment.StackTrace,它返回堆栈跟踪的字符串表示形式。
另一个有用的选项是在Visual Studio中使用$CALLER
和$CALLSTACK
调试变量,因为可以在运行时启用它,而无需重建应用程序。
Environment.StackTrace
只是new的一个实例StackTrace
。
System.Environment.StackTrace
可能是访问该信息的一种更方便的方法。
System.Diagnostics.StackTrace
:请参阅msdn.microsoft.com/en-us/library/…–
Environment.StackTrace
总是从头开始是不是很烦人at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
?在某些人正在寻找时,这不属于当前堆栈跟踪的一部分。
有两种方法可以做到这一点。该System.Diagnostics.StackTrace()
会给你当前线程的堆栈跟踪。如果您引用了Thread
实例,则可以通过的重载版本获取该实例的堆栈跟踪StackTrace()
。
您可能还需要检查Stack Overflow问题,如何获取非当前线程的stacktrace?。
您也可以在Visual Studio调试器中执行此操作,而无需修改代码。
当然,如果您在另一台计算机上运行代码,这无济于事,但是能够自动吐出堆栈跟踪信息而又不影响发行代码,甚至不需要重新启动程序,都非常方便。
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
似乎为我工作
StackTrace
是狗缓慢 -所以要节制利用。