什么原因会导致在调试时Visual Studio 2008卡住?

8
我有一个vb.net项目,有时在IDE中运行时会突然卡住。通常这不是问题,只需点击“暂停”,查看当前正在运行的线程,并找到死锁(或其他问题)即可。
但现在我遇到了这样一种情况,程序不仅会卡住,而且尝试暂停它会导致Visual Studio自身卡住。为了重新获得控制权,我必须杀死正在调试的程序进程,此时Visual Studio恢复正常并显示无法暂停执行。这很令人沮丧,因为杀死进程意味着程序状态丢失(当然),所以我不知道卡住的地方在哪里。
那么,有没有这种行为的常见原因?我应该寻找什么?

1
你找到解决方案了吗?我也陷入了完全相同的困境...... - Roey
5个回答

6

如果您的程序安装了全局钩子(与应用程序通信)- 可能会出现这种情况。 钩子尝试与您的应用程序通信(由调试器暂停),并被锁定。 调试器无法接收其窗口消息:钩子调试器(带有钩子DLL)和钩子应用程序之间的经典死锁。


哎呀,我花了很多时间来调试一个应用程序(使用SetWindowsHookEx),一步步调试时整个系统会卡顿一两秒钟。禁用钩子调用就解决了问题(小缺点:在调试时不能指望钩子正常工作)。感谢这个提示! - sharpener
那就解释了一切...我一直在使用WPF为Excel Add-In编写COM应用程序。调试器可能需要几分钟才能触发断点、显示抛出的异常,甚至停止调试。非常令人沮丧。 - Anthony Mason

3
寻找Visual Studio问题的特定解决方法可能会很棘手:http://social.msdn.microsoft.com/Search/en-US/?query=visual%20studio%202008%20hang&ac=3
此外,并非所有来自Microsoft的热修补程序都直接发布给公众。有些仅提供给系统出现特定问题的客户。因此,您必须联系Microsoft以获得修复程序。他们这样做是为了限制发布可能会破坏其他内容的热修补程序的潜在风险。所以,如果一切都失败了,请给他们打电话。
以下是我在Visual Studio开始出现问题时喜欢做的一些其他事情:
1.删除旧的断点和监视变量。
2.关闭Visual Studio后,删除智能感知文件(.ncb)。
3.清理解决方案,然后重新构建所有代码。

0

检查热修补和服务包。我曾经见过一个与 .net 编程有关的 bug,导致调试卡住。(对我来说,在 64 位操作系统上调试 C++ 32 位应用程序时,VS 有时会卡住。)


0

我之前遇到了一个类似的问题(VS无法中断执行),使用“调试 -> 删除所有断点”解决了这个问题。


-1

我会检查正在调试的程序的代码,我觉得你尝试调试的代码中可能存在无限循环或竞态条件。这在过去对我造成了影响,尤其是在我曾经拥有的单核笔记本电脑上。你能提供一些关于当你尝试暂停时认为执行到程序中哪里的信息吗?


我正在使用一种消息传递的编程范例。每个“难以正确锁定”的类都有一个调用队列,其他类必须使用它来请求执行任何操作。该程序是一个小型游戏服务器。当它锁定时,多个套接字将数据接收排队到处理对象中,该对象将日志信息排队显示到UI并将数据写回套接字。这就让我感到困惑:它不应该阻止用户界面,因为我尝试避免持有锁。我的CPU也没有出现无限循环的情况,因此我无法解释这种现象。 - Craig Gidney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接