C# Environment.StackTrace、StackFrame、Tirm的使用技巧

一、Tirm

这个我想没有程序员说不知道,但是里面有一个重载,这个不知道有多少程序员知道~

可以看到,我可以去掉字符串前后的指定字符,只要我在char[]中申请即可,而不是仅仅去掉空格

var s = "1,2,3,";

var r = s.Trim(new char[] { ',' });

Console.WriteLine(r);

Console.Read();

 

二、Environment.StackTrace

可能我们看到最多的就是catch中的e参数,里面会有一个StackTrace,然后不可否认的这玩意太有用了,它会把调用堆栈

中的信息输出出来,有了它,我们就可以快速的知道运行代码的执行流并且快速的定位到问题。

       有时候我们会遇到这样两个问题:

①:线上的bug在本地不能重现。

②:由于太多的多态,设计模式,程序员反而对线上的代码执行流向会搞的稀里糊涂的。

     为了搞清楚并解决这两个问题,我们看生产日志的时候很在乎代码的执行流以及想获取当前上下文的可疑变量值。获取可疑的

变量值,这个好说,我们通过记录一些变量值到log就可以了,但是怎么记录下当前语句的调用堆栈信息呢?这篇就是我要介绍的一

个属性,很简单,  答案也就在标题上,下面我们看看代码。

class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();

            person.Fly();

            Console.Read();
        }
    }

    class Person
    {
        public void Fly()
        {
            Fly("test");
        }

        public void Fly(string name)
        {
            Console.WriteLine("我的log日志。\n\n{0}", Environment.StackTrace);
        }
    }

 这不。。。文件名,方法名,行数都已经脱裤了,也算是给我们看生产日志时候的一把利器吧。

 

三、StackFrame

它跟Environment.StackTrace的作用是一样的,也是可以让方法名、文件名、行数脱裤,用于定位bug再好不过,此外,可以通过Debug目录下的,方法所在的类-类库生成的dll的对应的 .pdb文件,的有无,来控制日记里是否脱裤

        public void Debug(string msg)
        {
            if (LoggerLevel.Debug >= _curLogLevel)
            {
                LoggerEntry log = new LoggerEntry();
                StackFrame frame = new StackFrame(SkipFrames, true);
                log.file = frame.GetFileName();
                log.line = frame.GetFileLineNumber();
                log.level = GetLevelName(LoggerLevel.Debug);
                log.msg = msg;
                this.WriteLog(log);
            }
            System.Diagnostics.Trace.WriteLine(msg);
        }

----姜彦201810311204

转载于:https://www.cnblogs.com/jiangyan219/articles/9882286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值