如何在.NET中打印当前的堆栈跟踪,没有任何exception?

我有一个常规的C#代码。 我没有例外 。 我想以编程方式logging当前堆栈跟踪以进行debugging。 例:

public void executeMethod() { logStackTrace(); method(); } 

看看System.Diagnostics命名空间。 那里有很多好东西!

 System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace(); 

这是真的很好,有一个捅了一下,以了解发生了什么事情。

我build议你看看日志解决scheme(如NLog,log4net或微软模式和实践企业库),这可能会达到你的目的,然后一些。 祝你好运!

System.Diagnostics.StackTrace的替代方法是使用System.Environment.StackTrace ,它返回堆栈跟踪的string表示forms。

另一个有用的select是在Visual Studio中使用$CALLER$CALLSTACK debuggingvariables,因为这可以在不重build应用程序的情况下启用运行时。

有两种方法可以做到这一点。 System.Diagnostics.StackTrace()将为您提供当前线程的堆栈跟踪。 如果你有一个对Thread实例的引用,你可以通过StackTrace()的重载版本获得堆栈跟踪。

你可能也想看看堆栈溢出问题如何获得非当前线程的堆栈跟踪?

您也可以在Visual Studiodebugging器中执行此操作,而无需修改代码。

  1. 在想要查看堆栈跟踪的地方创build一个断点。
  2. 用鼠标右键单击断点,然后在VS2015中select“动作…”。 在VS2010中,select“When Hit …”,然后启用“打印消息”。
  3. 确保select“继续执行”。
  4. input你想打印的文字。
  5. 添加$ CALLSTACK无论你想看到堆栈跟踪。
  6. 在debugging器中运行程序。

当然,如果你在另外一台机器上运行代码,这并没有什么帮助,但是能够自动地吐出一个堆栈跟踪而不影响发布代码或者甚至不需要重启程序也是非常方便的。