VisualStudio出现死锁是BUG?

首先要承认这个标题有那么一丁点标题党,但这又不是完全的标题党。使用“正确”的调试方法的确可以把 VS 给搞死锁了。至于 VS 被死锁了算不算 Bug,这个问题有待于商榷。不想吐槽,先看看怎么用“正确”的方法把 VS 搞死锁。

玉屏ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

  首先要新建一个控制台项目,完整的复制下列代码:

 
 
 
 
  1.   using System.Threading;
  2.   namespace DeadlockVS
  3.   {
  4.   class Program
  5.   {
  6.   static object _obj = new object();
  7.   static void Main(string[] args)
  8.   {
  9.   Thread.CurrentThread.Name = "Main Thread";
  10.   ThreadStart ts = () =>
  11.   {
  12.   while (true)
  13.   {
  14.   lock (_obj)
  15.   Thread.Sleep(100);
  16.   Thread.Sleep(1);
  17.  }
  18.   };
  19.   for (int i = 0; i <2; i++)
  20.   new Thread(ts).Start();
  21.   Thread.Sleep(1000);
  22.  ts();
  23.   }
  24.   static int Get()
  25.   {
  26.   lock (_obj)
  27.   return 1;
  28.   }
  29.  }
  30.   }

  然后在正确的位置插上正确的断点:

然后在即时窗口里面输入:Get()

  现在你的 VS 有99.99%的概率会到达一种“死锁”状态(如果没有被死锁,恭喜你,你现在就可以去买双色球,记得中奖了分大家一点)。IDE 在等待寄主进程返回结果,而寄主进程又需要等待其中的某一个线程释放锁,又因为处在调试状态,寄主进程没办法继续执行下一步代码,也就无法释放锁,最终导致了一个死锁的存在。虽然是死锁,但是 VS 的 UI 并没有被锁死,所以我们现在***能做的事情就是结束调试。

  现在实验结束,大家来讨论下这算不算是 VS 的一个 Bug?

  正方观点:

  会影响正常调试,当然算 Bug

  只要导致程序非正常终止的都算 Bug

  反方观点:

  是你自己调试方法不正确,不能怪 VS

  BUG本身是错误,是不按正常的理解执行,不是说死锁就是有BUG

  怎么才能解决这一“Bug”?

  从程序员自身角度考虑,只有增加自身编码能力和调试能力

  从 VS 健壮角度考虑,可以使用沙箱模式,并检测到在执行一定时间还未得出结果后,主动退出。

  再看看维基百科是怎么定义 Bug 的:程序错误(英语:Bug),在程序设计中的术语,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。http://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BA%8F%E9%94%99%E8%AF%AF

  关于类似问题的探讨,还有另外一篇博文《一个WPF和SL的严重BUG,能导致任何的寄主程序崩溃》。

新闻标题:VisualStudio出现死锁是BUG?
URL标题:http://www.shufengxianlan.com/qtweb/news46/268446.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联