调试的程序窗口不会关闭

时间:2010-02-16 18:22:48

标签: c++ visual-studio-2008 debugging

我在64位XP机器上使用VS 2008。我正在通过控制台程序调试32位C ++ DLL。 DLL和EXE项目包含在同一个SLN中,因此我可以在测试时修改DLL。

每隔一段时间我就会用Debug |来杀死程序停止调试(Shift-F5)。 VS停止程序,但控制台窗口保持打开状态!如果我坐在一个断点并按下Shift-F5,它将正常终止,但如果程序在我停止时正在全速运行,我会经常看到它。

最大的问题是我无法关闭这些僵尸窗户。在任务管理器中使用“结束任务”不执行任何操作(无消息,无任何内容当我关闭机器时,它无法由于孤儿而无法实现关闭电源。

我认为这与将DLL和EXE项目放在同一个SLN中有关,就像几个月我在2个VS实例中处理这个项目一样,一个用于DLL,另一个用于EXE。在我工作的时候,我会不断地在窗户之间来回跳跃。直到我将这两个项目放入单个SLN之前,这个问题才发生过。单个SLN工作得更好,但这种异常非常令人恼火。

任何想法?

更新

经过一些搜索(here)后,我发现它似乎与上周二的某个更新有关(KB977165或KB978037)。感谢Microsoft出色的预发布测试。

7 个答案:

答案 0 :(得分:5)

这是KB978037。卸载它可以解决问题。

More info here

答案 1 :(得分:1)

控制台窗口由csrss.exe拥有,这是一个系统进程,实际上是唯一不能杀死的进程(至少在XP上,如果以正确的顺序执行,可以杀死其他系统进程,看看对于Mark Russinovich撰写的文章“没有服务的Windows运行”。所以不幸的是,电源循环似乎是摆脱僵尸控制台窗口的唯一方法。

答案 2 :(得分:0)

我肯定看到手柄未被释放且任务管理器无法正常工作的奇怪之处。我发现Process Explorer做得很好,并弄清楚孤儿窗口,文件锁以及发生的奇怪行为是怎么回事。

答案 3 :(得分:0)

最近同样的事情发生在我身上。我正在使用Windows XP 32位,VS 2008.我认为这与您的项目组织方式无关。也许通过Windows Update安装的补丁导致了这一点。

答案 4 :(得分:0)

我能找到的最好的方法是解决方法:将分离全部绑定到shift-F5按钮。通过这种方式,您基本上可以从调试器中释放窗口,您可以关闭窗口本身,而不是以孤立的cmd窗口结束。 希望MS能够提出解决方案。 工具 - >选项 - >环境 - >键盘。

顺便说一下,我上面描述的过程只是零星的。由于这个问题似乎经常发生,有没有办法最终一劳永逸地解决它?

答案 5 :(得分:0)

Mcrosoft承认并描述了这个问题,这里: http://support.microsoft.com/kb/982551/

他们发布了一个热修复程序,您可以从中获取: http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=982551&kbln=en-us

(您必须提供电子邮件地址,然后他们会向您发送受密码保护的HotFix安装程序)

答案 6 :(得分:0)

这里提供了一些很好的解决方案。

替代方法:不是通过按SHIFT-F5来停止调试会话,而是按CTRL-C,这会导致程序正常结束,从而消除问题的根源。