У меня серьезная ошибка в приложении, и я пытаюсь понять, что происходит ..
У меня есть несколько журналов непосредственно перед сбоем.
Я не могу просто воспроизвести ошибку.
контекст :
Thread1:
void f()
{
log(thread1_1)
boost::lock_guard< boost::recursive_mutex > lock(mutexABC)
log(thread1_2)
-- eventually corruption heap could occur here
log(thread1_3)
}
Thread2:
void f()
{
log(thread2_1)
boost::lock_guard< boost::recursive_mutex > lock(mutexABC)
-- eventually corruption heap could occur here
log(thread2_2)
}
В моих журналах (я использую LOG4CXX) у меня есть следующая последовательность:
15:36:45,260 thread2_1
15:36:45,263 thread1_1
15:36:45,265 thread1_2
15:36:45,265 thread2_2
some GUI log thread3_*
15:36:45,276 //application crash
and no thread1_3 log before thread2_2!
Как я могу войти в thread2_2 до thread1_3?
Блокировка может быть разблокирована из-за повреждения кучи без сбоя программы, и второй поток может получить эту блокировку и выполнить некоторый код перед сбоем приложения?
Я нахожусь под Windows 7. Моя C ++ программа включается в режим выпуска с включенной оптимизацией компилятора.
Задача ещё не решена.
Других решений пока нет …