如何从 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.StackTrace
和System.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 中的“滚动”事件中取消绑定所有先前添加的事件? [复制]