Pau*_*ams 5 vb6 com minidump windbg
背景
我们有一个用C#编写的.NET WinForms应用程序,它通过控制台应用程序连接到手持式商店扫描仪.控制台应用程序是用很好的'VB6编写的 - 那里没有托管代码.VB6应用程序由几个COM对象组成.
.NET WinForms应用程序通过使用正确的参数调用控制台应用程序来刷新扫描程序中的数据.当控制台应用程序启动时,它会弹出一个模态表单,提醒用户将手持设备放入其底座中.
问题
客户有一种奇怪的情况,即启动控制台应用程序的调用在显示提醒表单之前似乎已挂起.如果用户按下任何键 - 即使是像Shift或Alt这样无辜的东西 - 应用程序也会解冻,并显示提醒表单.挂起时,控制台应用程序的CPU使用率非常高.
我们使用ProcDump从命令行应用程序获取了内存转储.我有一些调试托管转储文件的经验,但这个VB 6转储对我来说很奇怪.
我们连续捕获了几个完整的内存转储.在其中一些中,似乎有COM胶水堆.例如,几个转储文件显示如下调用堆栈:
msvbm60!BASIC_DISPINTERFACE_GetTICount
msvbm60!_vbaStrToAnsi
msvbm60!IIDIVbaHost
msvbm60!rtcDoEvents
msvbm60!IIDIVbaHost
msvbm60!BASICCLASS_QueryInterface
[our code which I think is trying to create and invoke a COM object]
Run Code Online (Sandbox Code Playgroud)
我所拥有的唯一符号来自我们的代码并没有帮助.Microsoft符号服务器没有msvbm60.dll的PDB文件(或至少不是他们的版本6.0.98.2).
问题
我怀疑可能有一些COM线程问题只发生在他们的系统上.
1)如何确定转储文件中每个线程的线程状态?如果这是一个托管转储文件,我会查看!threads然后!threadstate找出线程状态.没有托管代码,所以我不能使用sos.dll.我没有看到任何提示使用~和!teb.
2)有没有办法看到在转储文件中创建了什么COM对象?同样,在托管转储中,我可以执行a !dumpheap以获取托管对象的列表.有没有类似我可以找到的COM对象?
3)我可以在转储文件中确定COM对象的线程模型吗?
| 归档时间: |
|
| 查看次数: |
1158 次 |
| 最近记录: |