我有一个常规的C#代码.我没有例外.我想以编程方式记录当前堆栈跟踪以进行调试.例:
public void executeMethod() { logStackTrace(); method(); }
Spence.. 375
看一下System.Diagnostics
命名空间.那里有很多好吃的东西!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
这是非常好的,可以随时了解最新情况.
我建议您查看可能达到您的目的的日志记录解决方案(例如NLog,log4net或Microsoft模式和实践Enterprise Library).祝你好运伴侣!
看一下System.Diagnostics
命名空间.那里有很多好吃的东西!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
这是非常好的,可以随时了解最新情况.
我建议您查看可能达到您的目的的日志记录解决方案(例如NLog,log4net或Microsoft模式和实践Enterprise Library).祝你好运伴侣!
另一种方法System.Diagnostics.StackTrace
是使用System.Environment.StackTrace,它返回stacktrace的字符串表示形式.
另一个有用的选项是在Visual Studio中使用$CALLER
和$CALLSTACK
调试变量,因为这可以在不重建应用程序的情况下启用运行时.
有两种方法可以做到这一点.该System.Diagnostics.StackTrace()
会给你当前线程的堆栈跟踪.如果您有对Thread
实例的引用,则可以通过重载版本获取堆栈跟踪StackTrace()
.
您可能还想查看Stack Overflow问题如何获取非当前线程的堆栈跟踪?.
您也可以在Visual Studio调试器中执行此操作,而无需修改代码.
创建要在其中查看堆栈跟踪的断点.
右键单击断点,然后在VS2015中选择"操作...".在VS2010中,选择"When Hit ...",然后启用"Print a message".
确保选中"继续执行".
输入您要打印的一些文字.
在想要查看堆栈跟踪的位置添加$ CALLSTACK.
在调试器中运行该程序.
当然,如果你在不同的机器上运行代码,这没有任何帮助,但是能够自动吐出堆栈跟踪而不影响发布代码或者甚至不需要重新启动程序就非常方便.
Console.WriteLine( new System.Diagnostics.StackTrace().ToString() );
输出将类似于:
在YourNamespace.Program.executeMethod(String msg)
在YourNamespace.Program.Main(String [] args)
Console.WriteLine
用您的Log
方法替换。实际上,不需要.ToString()
Console.WriteLine案例,因为它接受了
object
。但是您可能需要Log(string msg)方法。