分类: WINDOWS
2009-04-17 13:23:13
这个问题今天花了点时间研究了一下,找到原因且解决!细节如下:
1. 首先将liy的插件修改为最简单的插件只有item方式发现在vista环境下必然crash,这样基本排除了liy自己的log代码,以及扩展窗口插件的干扰。
2. 在xp先同样的client以及plugin未发现异常.
3. 使用windbg远程抓vista的加载器进程提出dump并且调试,初步怀疑是套件环境相关。
4. 我自己写了一个client程序模拟aliapplaoder那样启动一个线程创建然后退出,发现在vista下依然正常,因此排除掉liy的vb插件引起的问题可能性。
5. 到了这儿将问题定位到sdk的代码上.
6. 使用vs2005调试加载器,并且字退出时候打开所有异常,发现出现了vista下相同的0xc0000005 access vilotion 异常,不过奇怪的是xp下这个异常并不表现为crash,但是同样的dump以及触发的异常在vista下反映为crash,这个咨询过sl,暂时不知道?
7. 通过在加载的stub以及插件创建代码的log添加打印线程id。
8. 结果发现实际上插件的对象在工作线程释放,由于我的失误 , 插件对象依靠主线程的stub对象的析构函数释放,因此直接导致了这个访问异常。
到了这儿原因找到了,也解决了,不过还留下一个疑问? 为什么xp吃掉了这个异常,而vista下werfault.exe 系统捕获了这个异常,还需要
深入调查。