C#:方法调用详细信息

C#:方法调用详细信息,c#,C#,我有一个用C#开发的网站。我想查看方法的调用方,即哪个方法/事件处理程序调用我的方法 假设有一个按钮点击。我希望看到它如下 btnClick  BusinessLayerClass.SaveDocs(int docID, string docType) DataAccessLayerClass.Update() btnClick  BusinessLayerClass.SaveDocs(int docID, string docType) DataAccessLayerClass.In

我有一个用C#开发的网站。我想查看方法的调用方,即哪个方法/事件处理程序调用我的方法

假设有一个按钮点击。我希望看到它如下

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()方法返回的数组保持了调用方法的顺序。在上面的代码中,第一帧或最后一帧应该是调用方法的帧。在你弄明白之前,你可以随便玩玩。