アプリケーションに重大なバグがあり、何が起こっているのかを理解しようとしています.クラッシュの直前にいくつかのログがあります。単純にバグを再現することはできません。
コンテキスト:
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!
thread1_3 の前に thread2_2 をログに記録するにはどうすればよいですか? プログラムがクラッシュすることなく、ヒープの破損によってロックが解除され、2 番目のスレッドがこのロックを取得して、アプリケーションがクラッシュする前にコードを実行できますか?
Windows 7 を使用しています。私の C++ プログラムは、コンパイラの最適化がオンになっているリリース モードになります。