首页 新闻 会员 周边 捐助

MVC中StackTrace如何过滤非用户方法

0
悬赏园豆:20 [已解决问题] 解决于 2021-07-29 11:02

最近程序里面需要在方法中获取所有调用该方法的类和方法,用如下代码可以获取到,但是里面还包含了系统的方法,不知道如何过滤。

            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) 可以过滤部分,但还是存在非用户方法。

 

webaspx的主页 webaspx | 小虾三级 | 园豆:1973
提问于:2020-04-23 13:33
< >
分享
最佳答案
0

所谓“系统”和“用户”很多就没有区别。比如你github来的微软的,你怎么认定?你是认为他是“系统”还是非“系统”,那么只有按照包,根据自己的意识去filter。

收获园豆:20
花飘水流兮 | 专家六级 |园豆:13617 | 2020-04-23 15:15

是啊,目前看比较难过滤出来,现在只能根据关键字过滤

webaspx | 园豆:1973 (小虾三级) | 2020-04-23 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册