"Debugger detected - please close it down and restart!"问题的解决

Debugger detected  - please close it down and restart!...blahblahblah

这个问题有一些人遇到过,我也曾经遇到过,可是没有解决,直到这一次......

还是从头说起,还是GMFBridge项目,我用GMFPlay这个例子来研究GMFBridge,很快编译通过之后,我开始测试例子的功能,单独用编译出来的可执行文件可以正常执行,于是接下来很自然我认为项目已经没有问题了,开始在VS2005的IDE下执行,咦,怎么添加完文件之后就不动了,程序无响应,同时听到“邦”的一声,这是哪里出错了?还弹出了对话框?可是看不到对话框啊,这是怎么回事?折腾了半天,只是确定是在GMFBridge的Bridge.cpp 566行会出问题,就是下面这行代码:

        hr = pGraph->Render(pPin);

进一步发现是在循环第二次的时候出问题,这个时候有点挠脑袋了,为什么会在Render的时候出错呢?想跟踪也没法跟踪了。

搁了一夜,第二天想起了干脆在出错的时候dump出来分析,反正也是学习,多花点时间研究一下就是了。于是用DebugDiag(https://www.microsoft.com/downloads/details.aspx?familyid=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en&tm)在出错的时候dump了一个full dump和mini dump出来,用DebugDiag分析,DebugDiag真是不错,太好用了,提示“Detected possible blocking or leaked critical section at ntdll!LdrpLoaderLock owned by thread 5......”“The entry-point function for a dynamic link library (DLL) should perform only simple initialization or termination tasks, however this thread (5) is displaying a message box. Follow the guidance in the MSDN documentation for DllMain to avoid access violations and deadlocks while loading and unloading libraries.”,说明在某个后台的线程上弹出了对话框,所以造成了程序被block,不过这个时候还是有点不知所以,dll里面怎么会弹对话框,于是,请教了xiong li(http://blogs.msdn.com/lixiong/default.aspx),经过他的提示,硬着头皮自己用WinDBG分析了一下full dump,其实完全没有想象中困难,在经过~* kL100、~5s、kb100、da 02264ed0几个命令之后,da出了对话框上的提示信息,没错!就是开头的那句话,于是我回想起两年前其实我就遇到过这个问题了,当时在开发某个DirectShow相关的程序的时候也遇到了这个提示,只不过那时是一个单独的app,所以直接弹出了对话框,而这次GMFBridge本身是一个dll,对话框造成了线程block,害我绕了一大圈子还是回到了这里。

记得当时我认为在render的时候弹出这个对话框是MS对自己dll的保护,防止你reverse engineering去分析它,不过这次有点奇怪,是在第二次Render的时候才会弹出这个对话框,如果如我所想,那在第一次的时候就该弹对话框了啊,为什么要等第二次呢?我又有点不知所措了。

在经过一段时间的毫无头绪之后,我不得不把注意力放到Google上,希望能找到一个让我满意的答案。搜了一下,大致找到了两个原因:5.1 DivX Codec和NERO Burning Rom 6,但是我的机器上没有单独安装这两个东西,难道是我装的暴风影音或者KMPlayer含了其中的一个东东的某个组件,那我怎么知道是哪个呢?难不成都卸掉,可这也不是办法啊,我继续看着几篇可能有用的帖子,其中一篇(http://www.hitlabnz.org/forum/showthread.php?t=70)引起了我的注意,我点开了帖子的第二页,最后一篇回帖引起了我的注意:

July 30th, 2007 
julian 
Member   Join Date: Nov 2004
Posts: 5

--------------------------------------------------------------------------------

Hello all,

I too have encountered this problem and you do not have to completely uninstall Nero Burning Rom to fix this. It is possible to keep most of the functionality of Nero and run ARToolKit apps as well. 

The problem is that Nero installs a DirectShow filter which uses a protection scheme (AsProtect) to prohibit their code being run in a debugger. It sees Visual Studio as a debugger and kills you application. 

As far as I can tell the troublesome filter is NeVideo.ax, which you can find in: C:\Program Files\Common Files\Ahead\DSFilter (assuming default install directories etc...).

I renamed this file to "NeVideo.ax.old" and the problem went away. 

I haven't noticed any reduced functionality in Nero Burning Rom, although I only do simple CD/DVD burning. If you use any of the multimedia functions of Nero, you might run into problems after renaming its DirectShow filter. Perhaps someone could try it and report back.

Good luck,
Julian.

实在是太有用了,所以请原谅我将回复全文放在这里,谢谢Julian!


原因已经很明显了,是某个用AsProtect加了壳的dll引起了这个错误,我的机器上搜索了一下,没有NeVideo.ax这个文件,那哪个文件是罪魁祸首呢?

再回到IDE当中,注意到输出窗口中加载的dll,在第二次Render的时候,加载了这个dll——TRLDRP6.ax,难道是它吗?如何确认呢?


这个时候我那点可怜的Crack的知识发挥了作用,找出了PEiD这个查壳工具,一查之下,真相大白了。呼,终于找了真正的元凶,感觉真是一身轻松啊。

再回头看看这段历程,涉及到了dump文件,WinDBG调试,DirectShow,还有加壳工具,真是不容易啊,而且运气也不错,Julian的回复是7月30日的,也才一个月多点,真是及时雨啊!

把自己的一点经历放在这里,希望能给大家一点帮助。^_^

posted on 2007-09-12 16:48  sPhinX  阅读(7120)  评论(3编辑  收藏  举报

导航