問題タブ [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.
c - Valgrind ソース コードからユーザー変数にアクセスする
valgrind ソースコードを使って実験をしようとしています。テストコードとして以下のコードを使用しています。
「test.out」という名前の実行可能ファイルをビルドします。次に、以下のコマンドを実行しました。
私のテスト コードには初期化されていないバグがあり、valgrind は " mc_errors.c " からのバグを次のようなメッセージで報告します。
ここで、「 g_int」と「y」の値を valgrind からのメッセージ (バグ レポート) と共に出力したいと考えています。私はすでに valgrind ソース印刷に印刷を追加しています:「ローカル変数をここに印刷したい!」内部APIを使用してvalgrindソースからユーザーソースコードから変数の値を読み取る方法はありますか? ユーザーコードからすべての変数名を取得できれば、プラスになります。
c - valgrind memcheckでmempoolに名前を付ける方法はありますか?
PostgreSQL はメモリ プールを頻繁に使用し、Valgrind が有効になっている場合は、それらに関する情報を Valgrind に提供しますVALGRIND_CREATE_MEMPOOL
。
VALGRIND_DO_LEAK_CHECK
などのクライアント リクエストを使用したインクリメンタル リーク チェックと組み合わせるとVALGRIND_DO_ADDED_LEAK_CHECK
、大規模で複雑で長寿命のプログラムでメモリの使用状況を追跡するのに非常に役立ちます。
しかし: PostgreSQL には多くのキャッシュがあり、その有効期間はトランザクションのような典型的な境界にまたがる傾向があります。このようなキャッシュ内のメモリが (さまざまな理由で) リークしているように見えることは通常は問題ありませんが、そのようなメモリがスタックのみを使用してキャッシュ コンテキストに割り当てられているかどうかを特定することは必ずしも容易ではありません。
そのため、リーク レポートでメモリ プール名を表示し、抑制でそれらをフィルタリングする方法を探しています。理想的には次のようなもの
またはリークレポートでは、次のように:
Valgrind mempool を登録するためのインターフェースは名前を参照していないように見えるので、答えは「いいえ」だと思います。PostgreSQL の mempool のヘッダー ブロックには名前が埋め込まれているため、Valgrind にプール名のバイト範囲を教えればよいだけです。
何か足りないのですか、それとも今は不可能ですか?
実行可能な代替手段は、リークチェックレポートをフィルタリングしたり、注釈情報を追加したりするためのプログラムコールバックです。しかし、Valgrind には、これが可能であることを示唆するものは何もありません。
他の人が望んでいたことのように思えるので、私はそれを行う方法を見ていないだけかもしれません.
コンテキスト: キャッシュのどこかに割り当てが必要だと思いますが、TopMemoryContext
代わりに PostgreSQL に割り当てられています。そのため、一部として破棄する必要があるキャッシュよりも長生きしています。