Visual Studio出现死锁是BUG?

开发 后端
本文将介绍的是一个Visual Studio中正常操作会发生的死锁现象,权且可以算作一个BUG吧。

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

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

  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,能导致任何的寄主程序崩溃》。

原文链接:http://www.cnblogs.com/Aimeast/archive/2011/09/26/2192328.html

【编辑推荐】

  1. VS.NET 2010已经发布了beta2版本 新功能
  2. 初步了解Visual Studio 2010 Professional专业版
  3. Visual Studio 2010中使用MTLM管理测试工具
  4. Visual Studio 2010 SP1公测版已经发布
  5. Visual Studio 2010中敏捷开发流程模板的应用
责任编辑:彭凡 来源: 博客园
相关推荐

2011-03-01 08:47:40

Visual Stud

2009-08-12 09:47:39

Visual Stud

2023-09-05 07:32:22

vscode开源故障

2013-11-14 01:09:35

微软Visual StudVisual Stud

2021-07-04 22:29:12

MySQL死锁云日志

2011-02-24 10:05:26

Visual Stud

2009-12-02 09:43:38

Visual Stud

2024-02-27 12:42:38

开发前端

2019-09-19 08:00:00

Visual StudVisual Stud编程语言

2009-11-10 13:43:37

Visual Stud

2009-11-10 10:24:28

Visual Stud

2009-11-23 17:12:20

Visual Stud

2009-11-23 15:41:44

Visual Stud

2022-05-19 08:01:49

PostgreSQL数据库

2013-11-13 10:07:26

Visual Stud微软

2009-11-13 10:12:37

Visual Stud

2009-11-06 16:36:37

Visual Stud

2009-12-03 17:54:32

Visual Stud

2009-11-06 13:54:09

Visual Stud

2009-11-12 09:15:33

Visual Stud
点赞
收藏

51CTO技术栈公众号