C#属性指向自己导致的错误

        一次改Windows服务的代码, 原来是用到了多线程, 这一次的改动比较大, 改完却发现服务运行到一半就不行了, Windows日志也就提示服务已中止,但没有具体的原因。对于服务,调试什么的比较麻烦, 又加上一个多线程,导致排查bug异常艰难。虽然说可以先按单线程来写测试用例,但实际项目比较庞大了, 要构造一个测试用例都不容易。后来没法,用了踩地雷法,一步步加日志,看哪里出现了异常。日志加了很多,最终还是找出了元凶——可能是犯迷糊,无意中把属性指向了自己!

        其实最初在学习属性时, 老师就特别警告过: 如果属性指向了自己, 会导致死循环。这个也没什么好追究了。

        关键是如何来观察、确定这种错误呢?

        写了一段最简单的demo看看:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                TestClass obj = new TestClass();
                Console.WriteLine("开始输出……");
                Console.WriteLine(obj.Type);
                Console.WriteLine("输出完毕。");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.Read();
        }
    }

    class TestClass
    {
        public int Type
        {
            get 
            {
                return this.Type;
            }
        }
    }
}

可以看到:try catch 都无法捕获这个异常!

或者说: clr 认为这并不是一个异常, 只是代码在逻辑上有问题, 但这个问题它也不敢肯定就是写代码的人弄错了, 只好这样提示一下。

但这种情况, 有没有办法明确捕获到而不致于出了问题找那么困难呢?

如果哪位看官有更好的办法请告知!





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值