Любые идеи о том, как отладить этот странный сбой? - PullRequest
0 голосов
/ 14 октября 2011

Я получаю нарушение доступа внутри функции запуска wxThread при вызове EnterCriticalSection.Это происходит на сайте клиента, и я скачал оттуда файлы .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 байт

...