C#:方法调用详细信息
我有一个用C#开发的网站。我想查看方法的调用方,即哪个方法/事件处理程序调用我的方法 假设有一个按钮点击。我希望看到它如下C#:方法调用详细信息,c#,C#,我有一个用C#开发的网站。我想查看方法的调用方,即哪个方法/事件处理程序调用我的方法 假设有一个按钮点击。我希望看到它如下 btnClick BusinessLayerClass.SaveDocs(int docID, string docType) DataAccessLayerClass.Update() btnClick BusinessLayerClass.SaveDocs(int docID, string docType) DataAccessLayerClass.In
btnClick BusinessLayerClass.SaveDocs(int docID, string docType) DataAccessLayerClass.Update()
btnClick BusinessLayerClass.SaveDocs(int docID, string docType) DataAccessLayerClass.Increase()
有可能看到这样的堆栈信息吗?请告知
注意:所有项目都作为DLL添加。没有类似WCF的服务。可以使用System.Environment.StackTrace
private void button1_Click(object sender, EventArgs e)
{
StackTrace st = new StackTrace(true);
StackFrame[] fram = st.GetFrames();
foreach (StackFrame sf in fram)
{
sf.GetFileColumnNumber();
sf.GetFileLineNumber();
sf.GetFileName();
sf.GetILOffset();
sf.GetMethod();
}
}
可以使用System.Environment.StackTrace
private void button1_Click(object sender, EventArgs e)
{
StackTrace st = new StackTrace(true);
StackFrame[] fram = st.GetFrames();
foreach (StackFrame sf in fram)
{
sf.GetFileColumnNumber();
sf.GetFileLineNumber();
sf.GetFileName();
sf.GetILOffset();
sf.GetMethod();
}
}
检查应用程序中的堆栈跟踪几乎总是一个糟糕的设计选择。它是用来调试的,仅此而已。我们可以知道你为什么想看它吗?@Vilx-:获取stacktrace是有正当理由的。@leppie获取stacktrace的正当理由很少stacktrace@leppie-这就是为什么“几乎”这个词。总有例外。虽然在这种情况下,我还没有找到一个。检查应用程序中的堆栈跟踪几乎总是一个糟糕的设计选择。它是用来调试的,仅此而已。我们可以知道你为什么想看它吗?@Vilx-:获取stacktrace是有正当理由的。@leppie获取stacktrace的正当理由很少stacktrace@leppie-这就是为什么“几乎”这个词。总有例外。虽然在这种情况下,我还没有找到一个。谢谢。。但是,如何知道方法调用的顺序?(像SaveDocs调用Update()?)我猜GetFrames()方法返回的数组保持了调用方法的顺序。在上面的代码中,第一帧或最后一帧应该是调用方法的帧。就玩一会儿,直到你弄明白为止。谢谢。。但是,如何知道方法调用的顺序?(像SaveDocs调用Update()?)我猜GetFrames()方法返回的数组保持了调用方法的顺序。在上面的代码中,第一帧或最后一帧应该是调用方法的帧。在你弄明白之前,你可以随便玩玩。