最近程序里面需要在方法中获取所有调用该方法的类和方法,用如下代码可以获取到,但是里面还包含了系统的方法,不知道如何过滤。
var st = new StackTrace(new StackFrame(1,true)); var sfs = st.GetFrames(); foreach (var sf in sfs) { //非用户代码,系统方法及后面的都是系统调用,不获取用户代码调用结束 //获取堆栈信息中的方法名 var sfOffset = sf.GetILOffset(); if (StackFrame.OFFSET_UNKNOWN != sfOffset && sfOffset > 0) { var method = sf.GetMethod(); var tagName = $"{method.ReflectedType.Name}-{method.Name}"; if (!tags.Contains(tagName)) tags.Add(tagName); } }
使用StackFrame.OFFSET_UNKNOWN != sfOffset && sfOffset > 0) 可以过滤部分,但还是存在非用户方法。
所谓“系统”和“用户”很多就没有区别。比如你github来的微软的,你怎么认定?你是认为他是“系统”还是非“系统”,那么只有按照包,根据自己的意识去filter。
是啊,目前看比较难过滤出来,现在只能根据关键字过滤