1

次のコマンドでこのバイナリを実行すると、C++実行可能ファイルがあります

valgrind -v --leak-check=full --show-reachable=yes --track-origins=yes mybinary -mode init > 5.log 2>&1

0 で終了し、すべての出力ファイルが生成されます。

しかし、このバイナリを次のように実行すると

mybinary -mode init > 5.log 2>&1

多くの場所でコアダンピングです(次々と)。

valgrind で実行したときに動作が変わるのはなぜですか? valgrind は内部環境変数を設定しますか?

4

1 に答える 1

1

まさに Valgrind Manualが言うように、

Valgrind は、一度に 1 つの (カーネル) スレッドのみが実行されるように実行をシリアル化します。[...] あなたのプログラムは、Valgrind で実行されると、通常の実行時とは非常に異なるスケジューリングが表示されます。これは、Valgrind がスレッドをシリアライズしていることと、コードの実行速度が通常よりも大幅に遅いことが原因です。

また、デフォルトの Valgrind ツールである memcheck を実行しています。helgrind や DRD などのスレッドに焦点を当てたツールを使用して、同時実行性の問題に関する特定の情報を得ることができます。

于 2016-03-19T17:27:37.410 に答える