我快要绝望了。我正在使用 C# 和一些 p/Invoking 为 Windows Mobile 6.1 开发现场服务应用程序。(我想我引用了大约 50 个本机函数)
在正常情况下,这没有任何问题,但是当我开始强调 GC 时,我得到了一个令人讨厌的 0xC0000005 错误,女巫似乎无法捕获。在我的测试中,我正在快速关闭并打开一个对话框表单(该表单确实使用了本机功能,但为了测试,我将这些注释掉了),过了一会儿,Windows Mobile 错误报告器过来告诉我有一个致命的我的应用程序中的错误。
我的代码在事件中使用了 try-catchApplication.Run(masterForm);
并挂钩CurrentDomain.UnhandledException
,但应用程序仍然崩溃。即使我附加了调试器,Visual Studio 也会在发生异常时告诉我“与设备的远程连接已丢失”。
由于我没有成功在托管环境中捕获异常,因此我试图从 Error Reporter 日志文件中找出意义。但这没有任何意义,关于错误的唯一一致的是它发生的应用程序。
我不知道应用程序发生的线程,发生错误的模块有时会有所不同(我见过我的application.exe,WS2.dll,netcfagl3_5.dll和mscoree3_5.dll),甚至错误代码并不总是一样的。(大多数时候是 0xC0000005,但我也看到了 0X80000002 错误,这是第一个字节的警告?)
我尝试通过 bugtrap 进行调试,但奇怪的是,这会以相同的错误代码 (0xC0000005) 崩溃。我试图用visual studio打开kdmp文件,但我似乎没有任何意义,因为它只在我步入错误时显示反汇编代码(除非我有正确的.pbb文件,我没有't)。WinDbg 也是如此。
长话短说:坦率地说,我不知道在哪里寻找这个错误,我希望 stackoverflow 上有一些聪明的灵魂。我很高兴提供一些代码,但目前我不知道要提供哪一部分..
任何帮助是极大的赞赏!
[编辑 2010 年 5 月 3 日]
正如您在我对 Hans 的评论中看到的那样,我在取消所有 P/Invokes 的注释后重新测试了整个程序,但这并没有解决我的问题。我尝试用尽可能少的代码重现错误,最终看起来多线程访问给我带来了所有问题。
在我的应用程序中,我有一个用作手指/轻弹滚动列表的用户控件。在这个控件中,我为列表中的每个项目使用一个位图作为画布。在这个画布上绘图是由一个单独的线程处理的,当我禁用这个线程时,错误似乎消失了。我会对此做更多的测试,并将结果发布在这里。