如何从 first 到 end 方法获取所有先前调用的方法

Posted

技术标签:

【中文标题】如何从 first 到 end 方法获取所有先前调用的方法【英文标题】:how to get all previous called methods from first to end methods 【发布时间】:2021-11-27 07:20:18 【问题描述】:

假设我们有这段代码

namespace app.Entities

    public class school
    
        public bool Addschool()  
    



namespace app.layer1

    public class ManageSchool
    
        public bool schoolInfo() 
            schoolInfo.addSchool();
        
    



namespace app.layer

    public class schoolAPi
    
        public bool GetAndAdd()
        
            ManageSchool.schoolInfo();
        
    

我想知道 app.entitied 命名空间中哪些层和函数调用了 AddSchool() 方法 对于 exp : app.layer2.schoolAPi.GetAndAdd >> app.layer1.ManageSchool.schoolInfo >> app.Entities.school.Addschool

【问题讨论】:

你可以使用System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(); 能否请您严格遵守命名约定?在 C# 中,我们将 PascalCase 用于命名空间、类、方法和属性。 camelCase 通常适用于私人和本地成员 【参考方案1】:

尝试查看System.Diagnostics.StackTraceSystem.Diagnostics.StackFrame 类。 您可以使用Trace 方法创建一些Tracer 类来跟踪每个调用,但您应该将跟踪放在每个方法中以便能够跟踪它。

Tracer.cs 的示例:

using System.Diagnostics;

public class Tracer

    public static void Trace()
    
        StackFrame sf = new StackTrace(true).GetFrame(1);
        Console.WriteLine("Called 0 in 1 at line: 2", sf.GetMethod().ToString(), sf.GetFileName(), sf.GetFileLineNumber());
    

您的项目示例:

Entities.cs:

namespace App.Entities

    public class School
    
        public static bool AddSchool()
        
            Tracer.Trace();
            return true;
        
    

LayerOne.cs:

using App.Entities;

namespace App.LayerOne

    public class ManageSchool
    
        public static bool SchoolInfo()
                    
            Tracer.Trace();
            School.AddSchool();
            return true;
        
    

LayerTwo.cs:

using App.LayerOne;

namespace App.LayerTwo

    public class SchoolAPI
    
        public static bool GetAndAdd()
        
            Tracer.Trace();
            ManageSchool.SchoolInfo();
            return true;
        
    

还有一个Program.cs

using System;
using App.LayerTwo;

namespace App

    class Program
    
        static void Main(string[] args)
           
            Tracer.Trace();
            SchoolMethod();
            Console.ReadKey();
        

        static void SchoolMethod()
        
            Tracer.Trace();
            SchoolAPI.GetAndAdd();                
         
    

它会给你一些这样的结果:

您也可以将Tracer.Trace() 方法置于某些全局设置的布尔条件下,仅在需要跟踪时使用:

if (MySettingsClass.TraceEnabled)
    Tracer.Trace();

【讨论】:

以上是关于如何从 first 到 end 方法获取所有先前调用的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用inspect从Python中的被调用者那里获取调用者的信息?

如何从 jQuery 中的“滚动”事件中取消绑定所有先前添加的事件? [复制]

获取所有先前值的总和? - 到目前为止的总数? [复制]

如何从 Pyspark / Python 数据集中先前计算的列中获取值

如何在reactjs中获取先前的状态值

如何从 uibutton 中获取先前关于标签值的图像和标题?