managed.exe 中的 MyManagedFunc 调用 unmanaged.dll 中的 MyUnmanagedFunc()。我使用 Win32 在 unmanaged.dll 中生成了一个小型转储。设置未处理异常过滤器。我可以在调用堆栈中看到 MyUnmanagedFunc,但在托管端没有任何用处。
我应该能够使用 WinDbg 和 SOS.dll 来查看托管调用,对吗?下面是我的 WinDbg 会话。我究竟做错了什么?
可执行搜索路径为: Windows XP 版本 2600 (Service Pack 3) MP (4 procs) 免费 x86 兼容 产品:WinNt,套件:SingleUserTS 机器名称: 调试会话时间:Fri Sep 25 12:59:28.000 2009 (GMT-5) 系统正常运行时间:不可用 处理正常运行时间:0 天 0:00:08.000 …………………………………………………………………………………………………………………………………… 此转储文件中存储了一个感兴趣的异常。 可以通过 .ecxr 访问存储的异常信息。 (da0.1340):整数除以零 - 代码 c0000094(第一次/第二次机会不可用) eax=03a50000 ebx=001a2578 ecx=00000007 edx=7c90e514 esi=001a2550 edi=001a25a8 eip=7c90e514 esp=0012dd24 ebp=0012dd34 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 *** 错误:找不到符号文件。默认为 ntdll.dll 导出符号 - ntdll!KiFastSystemCallRet: 7c90e514 c3 ret *** 错误:找不到符号文件。默认为 kernel32.dll 导出符号 - 0:000> .loadby sos mscorwks 0:000> !线程 *** 错误:找不到符号文件。默认为 mscorwks.dll 导出符号 - 未加载 mscorwks.dll 的 PDB 符号 请求线程存储失败 0:000> .ecxr eax=0000000c ebx=00160c20 ecx=00000000 edx=00000000 esi=0012efb8 edi=0012eea4 eip=01201712 esp=0012edd8 ebp=0012eea4 iopl=0 nv up ei pl nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206 *** 警告:无法验证 NativeDLL.dll 的校验和 NativeDLL!MyBad+0x22: 01201712 f77d0c idiv eax,dword ptr [ebp+0Ch] ss:0023:0012eeb0=00000000 *** 警告:无法验证 System.Windows.Forms.ni.dll 的校验和 *** 错误:模块加载完成,但无法为 System.Windows.Forms.ni.dll 加载符号