我的程序导致Windows DLL中的分段错误 - 我该如何调试它?

时间:2014-02-27 10:45:17

标签: c++ debugging crash segmentation-fault

所以我写了这个相对较大(~6000 LOC)的Qt应用程序,我在Windows 7中使用它,我得到了这些奇怪的分段错误。大部分时间一切都按照我的预期运行,但有时候,我在ole32.dll中遇到分段错误,这是Windows的一部分。反汇编看起来像这样:

Function: ole32!CoAddRefServerProcess
0x7601c98a  <+0x02e3>         or     %cl,0x37890446(%ecx)
0x7601c990  <+0x02e9>         call   0x760326a6 <ole32!ObjectStublessClient15+2849>
0x7601c995  <+0x02ee>         xor    %eax,%eax
0x7601c997  <+0x02f0>         pop    %esi
0x7601c998  <+0x02f1>         pop    %edi
0x7601c999  <+0x02f2>         pop    %ebx
0x7601c99a  <+0x02f3>         pop    %ebp
0x7601c99b  <+0x02f4>         ret    $0x4
0x7601c99e  <+0x02f7>         mov    (%eax),%ecx
0x7601c9a0  <+0x02f9>         push   %eax
0x7601c9a1  <+0x02fa>         call   *0x8(%ecx)
0x7601c9a4  <+0x02fd>         jmp    0x7604a6d9 <ole32!CoRevokeClassObject+16608>
0x7601c9a9  <+0x0302>         test   $0x2000000,%eax
0x7601c9ae  <+0x0307>         jne    0x76025dc1 <ole32!StgOpenStorage+5555>
0x7601c9b4  <+0x030d>         jmp    0x7604a715 <ole32!CoRevokeClassObject+16668>

故障总是发生在同一个地方的同一个dll函数中(第一个mov命令)。当故障发生时,应用程序中没有特定的时间或地点,但是当程序收集或保存数据时它更有可能发生(当它什么都不做时似乎很稳定 - 我让它在没有运行的情况下运行过夜而没有崩溃)。

我对此感到困惑,因为分段发生在一段我没写过的代码中,即使Windows中的错误并非闻所未闻,我想我的程序更有可能搞砸了这个dll使用的内存,从而导致问题。任何人都可以建议如何找到真正导致问题的代码吗?

0 个答案:

没有答案