問題タブ [mtrace]

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.

0 投票する
4 に答える
6671 参照

c - GLIBC: メモリリークのデバッグ: mtrace() の出力を解釈する方法

メモリ リークの問題をデバッグしようとしています。malloc/free/realloc トレースを取得するためにmtrace()を使用しています。プログラムを実行したところ、巨大なログ ファイルが作成されました。ここまでは順調ですね。しかし、ファイルの解釈に問題があります。次の行を見てください。

これに関する奇妙な点は、1 つの呼び出し (同じ戻りアドレス) が 4 つの割り当てを担当していることです。

さらに見知らぬ人:

これらの 2 行の間で、ブロック 0x2aaab43a1700 が解放されることはありません。

誰もこれを説明する方法を知っていますか? 1 回の呼び出しで 4 つの割り当てが発生するのはなぜですか? また、以前に割り当てられたアドレスを malloc で返すにはどうすればよいでしょうか。

edit 2008/09/30: GLIBC が提供する mtrace() 出力を分析するスクリプト (mtrace.pl) は、ここでは役に立ちません。それはただ言うでしょう:0x2aaab43a1700重複を割り当てます。しかし、どうしてこれが起こるのでしょうか?

0 投票する
4 に答える
2061 参照

c - Fortran プログラムの mtrace

mtraceFortran プログラムでメモリ リークを検出するために使用しようとしています。gfortran コンパイラを使用しています。mtrace の (動作する) C の例については、ウィキペディアのエントリを参照してください: http://en.wikipedia.org/wiki/Mtrace

私は両方の方法を試しました。つまり、mtrace() と muntrace() をラップして fortran プログラムから呼び出し、また mtrace() と muntrace() を直接呼び出す C プログラムを作成しました。どちらの方法でもメモリ リークを検出できませんが、ここでは後者のみを紹介します。

example.c

leaky.f90

私はコンパイルします:

次に、次のように実行します。

raw.txt mtrace次に、出力を次のように解析します。

そして得る:

メモリリークはありません。

私が間違っていることはありますか、またはmtraceリークのあるfortranメモリ割り当てを見つけるためにできることはありますか? gfortran はトレースしない別のmalloc呼び出しを使用していると思いmtraceます... 実際、上で書いたように、(ラップされた)mtrace()muntrace().

EDITED:他のオプション(ここではまだ言及されていないものを含む)を検討しましたが、デバッグ中の実際のコードはP6 / AIXで実行されるため、Valgrindは「ちょうど」不便です(別のマシンで実行する必要があります)一方、Forcheckは不便 (別のマシンで実行する必要があります) で、高価です (~ 3k$)。現時点では、mtrace が最適なソリューションです。

再編集:私の推測

gfortran はトレースしない別のmalloc呼び出しを使用していると思います...mtrace

正しかった。実行可能ファイルを調べると ( または のいずれかでnm)readelf呼び出しはありませんmalloc()が、_gfortran_allocate_arraymalloc を呼び出す可能性があるものがあります)。他のアイデアはありますか?

再度編集: 回答を投稿しましたが、受け入れることができません ( http://stackoverflow.uservoice.com/pages/general/suggestions/39426にアクセスして、機能をリクエストしてください。本当に必要です。評判の向上は必要ありません)。

0 投票する
1 に答える
4314 参照

malloc - バイナリプログラムのmtrace(MALLOC_TRACE)を有効にする

ソースのないバイナリプログラムに対してmtrace() (およびenv)を有効にするにはどうすればよいですか?MALLOC_TRACE

mtraceはglibcの機能です:http ://www.gnu.org/s/hello/manual/libc/Allocation-Debugging.html

ありがとう

0 投票する
1 に答える
565 参照

glibc - mtrace+MALLOC_TRACE-バッファリングを無効にする

バッファリングを無効にしmtraceて、名前の付いたファイルを出力するにはどうすればよいですMALLOC_TRACEか?

mtraceは次のように開始されます。

0 投票する
2 に答える
702 参照

c - Windows の場合は MALLOC_TRACE

当社では、メモリ リークを検出するための glibc の mtrace (MALLOC_TRACE) 機能に似た社内フレームワークを使用しています。このフレームワークは Windows で実行するように作成されていますが、GNU/Linux ではうまく動作しません。

では、Windows、GNU/Linux、できれば MacOSX でも実行できる、移植可能な mtrace (MALLOC_TRACE) に相当するものを知っている人はいますか?

0 投票する
0 に答える
452 参照

c++ - 完全なスタック トレースを含む mtrace はありますか? または、この機能を持つように単純に変更できますか?

巨大なアプリのメモリ消費の分析中に、glibc の mtrace を使用します。しかし問題は、malloc 呼び出しのソースだけを提供し、完全なスタック トレースを提供しないことです。したがって、多くの場所で使用されているメソッドで malloc を使用すると、malloc の見分けがつかないソースが 1 つだけ報告されます。もう 1 つの問題は、標準の C ライブラリと、CSimpleArray などの汎用オブジェクトです。誰かが巨大な配列を使用したことだけは知っていますが、誰が正確にはわかりません。

したがって、誰が malloc を正確に使用したかを知るには、完全なスタック トレースが必要だと考えました。そのような mtrace の亜種が存在するかどうか知っていますか? または、それを行うために単純に変更できますか?

注意: 私の mtrace.out ログには 30 万行が含まれており、mtrace スクリプトで処理した後は 1 万のエントリがあります。最大の 10% のチャンクのみをローカライズすれば十分です。

0 投票する
1 に答える
317 参照

c - valgrind で mtrace を正常に実行できますか?

5 つの malloc と 3 つの解放を行うプログラムがあります。最初に mtrace() を呼び出し、最後に muntrace() を呼び出します。プログラムを正常に実行すると、mtrace は不足している解放を報告します。私が行った場合:

valgrind は不足している解放を報告しますが、mtrace は報告しません。

したがって、両方を一緒に使用することはできないと思います-valgrindはmtraceをオーバーライドしますか?

0 投票する
1 に答える
784 参照

c++ - g++ -static はメモリ リークを引き起こします (mtrace によって報告されます)

だから私は誰かが光を当てることができることを望んでいるという奇妙な問題を抱えています...私は次のコードを持っています:

そして、私はこれらの2つの方法でコンパイルしました:

mtrace の出力 (私の場合は mem.out) を見ると、

-staticオプションのmtraceレポートを使用すると、次のように表示されます。

しかし、-staticオプションを除外するmtraceと、輝かしいことが報告されます。

ここで何が起こっているかについてのアイデアはありますか?