0

アプリケーションに重大なバグがあり、何が起こっているのかを理解しようとしています.クラッシュの直前にいくつかのログがあります。単純にバグを再現することはできません。

コンテキスト:

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++ プログラムは、コンパイラの最適化がオンになっているリリース モードになります。

4

0 に答える 0