TNTGina - 你用VC调试程序时经常死机吗

来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:46:17
TNTGina - 你用VC调试程序时经常死机吗
大 |中 |小
[2006/05/31 12:41 | byYonsm ]
如果是,而且又不想忍受漫长的注销过程,试试看这个 Gina 吧——TNTGina——用于 Terminate MSVC 的 NTGina。
缘起:
VC 在调试多线程程序(GraphEdit 调试 DShow Filter 时,基本上都是)的时候经常死机,特别是在 Windows XP 中。
此时按 Ctrl+Alt+Del 有效,但唤出任务管理器后,却无法操作。只好作注销或重启处理:(
注册:
保存到系统登录时能访问到的路径上,用 RegSvr32.exe TNTGina.dll 注册它。重新启动系统后才能生效。
(这不是一个COM组件,只不过为了注册和注销方便,导出了两个函数,里面其实只是写了注册表的一个键值,改写了GinaDLL的路径)。
注销:
RegSvr32.exe /u TNTGina.dll
用法:
注册这个 Gina 后,问题就接解决了——虽然不能从根本上解决问题——不能防止VC死掉——但却可以:
按亮 ScrollLock,然后按 Ctrl+Alt+Del,MSVC 马上被终止掉,系统恢复用户界面响应。重新打开VC调试吧……
原理:
这是一个 Gina DLL,Gina 是负责处理系统登录等用户界面操作的DLL,且 MS 允许用户重写它。
于是我写了这个 DLL,处理了 SrcollLock 高亮状态下的 Ctrl+Alt+Del 安全事件,并强制终止 MSVC 进程。
对于其它情况处理,则转交给原来的 MSGina.dll。
后话:
这个 DLL 是使用 AheadLib 自动生成的,然后添加了一点操作代码。
下载:
TNTGina (包括代码)
代码 |评论(8) |引用(0) |阅读(13438)引用功能被关闭了。
wsjws2007/11/10 21:29
和aling 描述的一样,VC2008一样会有mspdbsrv.exe的问题。在我的机器上就是如果不把mspdbsrv.exe进程终止的话,一定会假死......晕死
aling2007/07/09 22:59
谢谢,对vc2005也有用。不过有时mspdbsrv.exe这个进程如果上次调试时没有把它结束的话,再次重运行vc2005有时会第一次就假死。而一般情况下vc2005第一次debug多线程程序时还算正常,如果没有退出vc2005,而且也没有新build的话,再次调试,就一定会假死,感觉这个问题也太恶心了,都2005(vc8)了阿。
周翀2007/03/28 09:07
nicechao,vmware很多问题解决不了的,呵呵。你在那上面调试一般程序可以,但是调用使用串口的、通用串口的就都不好使。而且那上面速度毕竟比较慢。
但最关键的是无法调试要用到通用串口的程序,或者你知道如何设置vmware使得能够使用通用串口?我反正没找到方法呵呵。
周翀2007/03/28 09:03
嗯,调试了5年VC程序了,从6到2003,这个问题一直存在且太折磨人了。
呵呵。也早就发现这其实是个假死,我感觉应该是GUI系统卡住了。却一直没有想起编这样一个程序来辅助结束devenv.exe。谢谢你了。
不知道微软自己怎么想这个问题?我就奇怪怎么这么长时间,一点官方说法都没有??不知道2005里是不是能够修正这个问题了。
我记得当初用VC6时,好像是装了SP4后就好了?不过那是N年前的事了,也可能是我记错了。
nicechao2007/01/29 15:12
用vmware装个系统,用VC的远程调试则完全无此问题
sunss2006/11/28 16:56
jq你的办法我试过了,挺好用的,但是解决不了根本问题,可以如下解决:在建立线程的那行代码前设置断点,当要执行该线程时,马上F5。
jq2006/10/25 15:27
看来是VC的调方式器有问题?
根据我的经验,是在断点处不能切换到主界面。
可以点中止调试(Shift F5),大约1分钟会恢复主界面。
不点中止调试好象一直处于假死状态。
不知为什么调方式器会造成整个系统的假死?Yonsm 回复于 2006/11/28 21:22
是VC Debugger的问题
路过2006/03/15 15:38
自己写个程序监视全局快捷键就好了,没这么复杂,还弄个com。。。Yonsm 回复于 2006/03/15 19:28
扯的,……此时系统停止对除Ctrl+Alt+Del之外的其它响应了……
另外,这不是COM,只是我道出了两个函数用来注册和注销Gina