1

作業中のマルチスレッドC++プログラムのデバッグに苦労しています。コード内の同じ場所でクラッシュしているように見えますが、変数が別のスレッドによって割り当て解除されたことが原因で、その後、変数がポインターによってアクセスされたときにプログラムがクラッシュすることがあります。

このため、デバッグのためにプログラムをステップスルーする方法はありません。gdb内の特定の変数のすべてのインスタンスを追跡し、そのメモリ位置に対して実行された特定のアクションを追跡する方法はありますか(誰がどこで割り当てを解除したかを確認できます)?または、これをデバッグする他の良い方法はありますか?

4

1 に答える 1

4

作業中のマルチスレッド C++ プログラムのデバッグに苦労しています

GDB (またはその他のデバッガー) を使用してマルチスレッド プログラムをデバッグするの困難です。

あなたが与えた特定の例について:あるスレッドfree()が別のスレッドがまだアクセスしているメモリにアクセスしている場合、ValgindAddressSanitizerはGDBよりもはるかに良い結果をもたらす可能性があります。

于 2012-11-13T06:45:37.220 に答える