問題タブ [memcheck]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
valgrind - 特定のフォークされた子のリーク チェックを抑制します
ユーティリティでフォークされた子プロセスを終了するときに、すべてのメモリを解放できないことがよくあります。ライブラリ内のこれらのメモリ リーク検出を抑制したい。
--show-leak-kinds=all
ライブラリを使用している開発者に、誰も実際には何もできない子プロセスからのリーク レポートを確認しなければならないという負担をかけたくありません。
コマンドラインで を使用して、すべての fork プロセスのレポートを抑制できることは承知してい--child-silent-after-fork=yes
ますが、これによりメイン アプリケーションからのレポートも抑制される可能性があり、ユーザーは常にこのオプションを指定することを覚えておく必要があります。
これが問題となる非常に一般的なケースは、対象の実行可能ファイルを実行せずに子プロセスを終了する必要があるエラー パスがトリガーされたときに、fork/exec を使用するコードです (セットアップに失敗したか、最終的に実行可能ファイルが実行可能ではなかった可能性があります)。 . 他のユースケースには、長寿命のヘルパープロセスが含まれる場合があります (pulseaudio または同様のコードの時代より前の alsa の dmix プロセスなど)。
これは開発者にとって使いやすいはずなので、valgrind 呼び出しにパラメーターを手動で追加する必要なく、ライブラリに実装できるソリューションを探しています。考えられる解決策には、クライアント要求の使用、クライアント要求を使用した監視コマンド、または巧妙なコーディングが含まれる場合があります。
最小限の例:
something_that_forks がいくつかのライブラリにあると思います。valgrind が子プロセスでリークを報告しないように、これを変更する方法を探しています。もちろん、ライブラリは他のコンポーネントによるメイン プログラムの割り当てについては何も知りません。
valgrind - その他の Memcheck コンテキスト行
プログラムの実行の最後に、"leak check full" "show leak kinds all" を実行すると、例として、次のようなセクションの形式で多くのリークインシデントが表示されます。
最上位のスコープはmain
であり、複数のブロックでは、このブロックのように、コール スタックが まで表示されないほど十分な深さがありますmain
。他のインシデントでは、すべてのレベルを表示するのに十分なコンテキストがあります。
このホストでは、ここに 12 レベルしか表示されていないことがわかりました (vg_replace_malloc.c
その後、私の 11 ユーザー レベル)。
12 を超えるレベルを表示するように構成できますか?
Valgrind の引数、Memcheck の引数は冗長性が増し、成功していません。
valgrind - リーク検出のために valgrind でベースライン メモリ使用量を設定することは可能ですか?
コード内から valgrind にメモリ リークのチェックをいつ開始し、いつ終了するかを伝える方法はありますか?
実行するためにテスト プログラムとリンクする必要がある従来のテスト フレームワークを使用しています。フレームワークにはメモリ リークがあります。valgrind は、解放されていない約 50KB のメモリを示していますが、ヒューリスティックによって到達可能です。コードからどれだけのメモリがリークされているかを確認するには、この数値を覚えておく必要があるため、これは面倒です。最初のテストの開始時にメモリ統計の収集を開始し、最後のテストの終了時に収集を停止するように valgrind に指示できれば、はるかに便利です。そのための API はありますか?