前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VisualStudio 打断点和不打断点的区别

VisualStudio 打断点和不打断点的区别

作者头像
林德熙
发布2020-02-17 14:51:31
8820
发布2020-02-17 14:51:31
举报
文章被收录于专栏:林德熙的博客

因为小伙伴告诉我他的代码在打断点的时候可以运行,但是在不打的时候出现异常。我去他那里看到,真的是这样,最后发现原来是代码写错了。本文来告诉大家,如果遇到了进入断点和没有进入有区别,可能的问题。

如果发现打断点和不打软件运行不同,那么可能的原因就是时间,例如有两个线程,使用相同属性,请看代码

代码语言:javascript
复制
int n = 0;

//线程1

if(n == 0)
{
	n ++;
}

//线程2
if(n == 1)
{
	//代码
}

可以看到线程2依赖线程1先运行,所以可能在运行的时候,有时可以进入代码,有时无法。只要这时存在线程2等待一下,那么一般都可以进入。所以遇到断点让程序可以运行或者不能的时候,先看一下是不是线程的问题。有没有属性没有加锁。

随机数

实际上小伙伴的问题是有随机数。默认的随机数的构造方法使用的是时间,所以如果创建两个随机数,可能拿到的值是相同,请看下面的代码

代码语言:javascript
复制
    class DhtwSwyotml : IEquatable<DhtwSwyotml>
    {
        /// <inheritdoc />
        public DhtwSwyotml()
        {
            var ran = new Random();
            HvkemkKevavvqur = ran.Next();
        }

        public int HvkemkKevavvqur { get; set; }

        /// <inheritdoc />
        public bool Equals(DhtwSwyotml other)
        {
            if (ReferenceEquals(null, other)) return false;
            if (ReferenceEquals(this, other)) return true;
            return HvkemkKevavvqur == other.HvkemkKevavvqur;
        }

        /// <inheritdoc />
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != this.GetType()) return false;
            return Equals((DhtwSwyotml)obj);
        }

        /// <inheritdoc />
        public override int GetHashCode()
        {
            return HvkemkKevavvqur;
        }

        public static bool operator ==(DhtwSwyotml left, DhtwSwyotml right)
        {
            return Equals(left, right);
        }

        public static bool operator !=(DhtwSwyotml left, DhtwSwyotml right)
        {
            return !Equals(left, right);
        }
    }

使用下面的代码的时候出现了错误访问

代码语言:javascript
复制
        static void Main(string[] args)
        {
            var sutpSgeg = new DhtwSwyotml();
            var kzduDglirxr = new DhtwSwyotml();
            if (sutpSgeg.Equals(kzduDglirxr))
            {
                Console.WriteLine("错误进入");
            }
         
        }

本来两个不同的对象希望返回 false ,结果写为 true ,而且在 kzduDglirxr 断点可以看到不会进入错误的代码。

所以如果遇到这个问题,首先需要想是不是时间问题,如果遇到时间的问题,那么需要解决代码才可以。

参见:Make GenericParameterHelper’s behavior same between running and debugging by walterlv · Pull Request #362 · Microsoft/testfx

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 随机数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档