已调试的程序窗口无法关闭

8
我正在64位XP机器上使用VS 2008。我通过控制台程序调试32位C++ DLL。DLL和EXE项目包含在同一个解决方案中,以便我在测试时修改DLL。
问题是,每隔一段时间我都会用Debug | Stop Debugging (Shift-F5)杀死程序。VS停止了程序,但控制台窗口仍然打开!如果我坐在断点上并按下Shift-F5,它将正确终止,但如果程序在全速运行时我停止它,我通常会看到这个。
最大的问题是我无法关闭这些僵尸窗口。在任务管理器中使用End Task什么也没发生(没有消息,没有任何反应)。当我关闭计算机时,由于存在孤儿进程,它无法关闭,我不得不实际上关闭电源。
我认为这与将DLL和EXE项目放在同一个解决方案中有关,因为几个月来我在两个VS实例中工作该项目,一个用于DLL,另一个用于EXE。我会不断地在窗口之间跳来跳去。直到我将这两个项目放入单个解决方案中,这个问题从未发生过。单个解决方案的效果要好得多,但这种异常非常令人恼火。
有任何想法吗?

更新

经过一番搜索(在这里),我发现似乎与上周二的其中一个更新有关(KB977165或KB978037)。感谢微软卓越的预发布测试。

7个回答

5

1

控制台窗口由csrss.exe拥有,它是一个系统进程,实际上是唯一一个无法终止的进程(至少在XP上,如果按正确顺序终止其他系统进程,可以参考Mark Russinovich的文章“不带服务运行Windows”)。因此,不幸的是,强制重启似乎是摆脱僵尸控制台窗口的唯一方法。


0

我确实见过句柄未被释放和任务管理器无法正常工作的情况。我发现Process Explorer可以很好地解决孤立窗口、文件锁定以及通常发生的奇怪行为。


0
最近我也遇到了同样的问题。我正在使用Windows XP 32位和VS 2008。我不认为这与你的项目组织有关。可能是通过Windows更新安装的补丁引起的这个问题。

0

我能找到的最好的解决方法是一个变通方法:将“取消全部附加”绑定到Shift-F5按钮。这样,您基本上可以从调试器中释放窗口,而不会导致孤立的cmd窗口。

希望微软能够提出解决方案。工具->选项->环境->键盘。

顺便说一下,我上面描述的过程只有偶尔可行。由于这个问题似乎经常发生,有没有办法最终彻底解决它呢?


0

1
哇,微软花了4个月的时间来解决这个问题。你会认为这个问题应该排在他们的首要任务之列。他们在那里确实使用Visual Studio,不是吗? - Marc Bernier
从微软的角度来看,4个月时间很快。但是修复他们的Internet Explorer中的几个关键安全问题却花费了6-8年的时间。 - Calmarius
KB 982551似乎没有64位XP的下载。 - danio

0

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

另一个选择是:不要按SHIFT-F5停止调试会话,而是按CTRL-C,这会使程序正常结束并消除问题的根源。


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