关于如何调试这个奇怪的崩溃的任何想法?

时间:2011-10-14 13:10:19

标签: multithreading wxwidgets access-violation

当调用EnterCriticalSection时,我在wxThread的启动函数中遇到访问冲突。这发生在客户站点,我从那里下载了.dmp文件以查看更多信息。在某种程度上,似乎CRITICAL_SECTION结构搞砸了,但是看到崩溃时的汇编代码和寄存器内容它仍然很奇怪,eax是0,而它是从它加载的内存单元,即[esi + 0x10]不包含0.这可能是.dmp文件的问题。

然而,主要的问题是,如果有人知道这可能发生的任何其他原因,而不是由于某些程序错误的随机内存写入。我已经发生了5次这次崩溃,没有其他虚假的崩溃。这与wxThread是浅层对象的事实相结合,使得应用程序代码似乎不太可能找到并销毁CRITICAL_SECTION结构的特定部分。

特别是知道是否有人经历过(并解决了!)类似的问题当然会很有趣。

环境是VS2008sp1和wxWidgets 2.8.11

这是线程的非常短的调用堆栈。可能这个线程正在死亡:

ntdll.dll!_RtlpWaitForCriticalSection@4()  + 0x5b bytes 
ntdll.dll!_RtlEnterCriticalSection@4()  + 0x46 bytes    
Shapesoft.exe!wxCriticalSection::Enter()  + 0x7 bytes   C++
Shapesoft.exe!wxThreadInternal::WinThreadStart()  + 0x8e bytes  C++
  

msvcr90.dll!_callthreadstartex()第348行+ 0x6字节C.       msvcr90.dll!_threadstartex(void * ptd = 0x09c892a0)第326行+ 0x5字节C       kernel32.dll!_BaseThreadStart@8()+ 0x37 bytes

0 个答案:

没有答案