LMDBGは、メモリleaksand二重解放を検出するためのアプリケーションです しかし、他のものとは異なり、LMDBGはFULL *生成* stacktracesandはモジュール単位でアプリケーションを分析するために、分析thusallowingからログインして分離します。
- のlmdbgランのメインlmdbgユーティリティです。これは、アプリケーションを実行し、ログファイルを作成します(またはFIFO)ここで、すべてと呼ばれるのmalloc / callocは/ reallocの/無料/あるmemalign /でposix_memalignの呼び出しそれらの入力に登録されている(バイトカウント、ポインタ)、出力(ポインタ)と(!!!ユニークフィーチャー!!!)FULL STACKTRACE(ポインタ)。
例:
     $猫のテスト/ test2.c
    の#include
    メインINT()
     {
        void *型P1 = NULL;
        void *型P2 = NULL;
        P1 =のmalloc(555);
        P2 =のrealloc(P2、666);
        P2 =のrealloc(P2、777);
        P2 =のrealloc(P2、888);
        0を返します。
     }
     $ gccの-O0 -g -o _test2テスト/ test2.c
     $ lmdbgラン-o _log ./_test2
     $猫_log
    のmalloc(555) - > 0xbb901400
      0xbbbe58e8
      0xbbbe5b03
      0x8048738
      0x8048584
      0x80484e7
    のrealloc(NULL、666) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804874e
      0x8048584
      0x80484e7
    のrealloc(0xbb901800、777) - > 0xbb901c00
      0xbbbe58e8
      0xbbbe5a37
      0x8048764
      0x8048584
      0x80484e7
    のrealloc(0xbb901c00、888) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804877a
      0x8048584
      0x80484e7
     $
注:の完全なスタックトレースは、アプリケーションを分析することができますあなたがブロック/部品は他人となぜより多くのメモリを必要とするものを検出することができますすなわち。 lmdbg-SYMこのために非常に重要なツールである、下記を参照してください。
- のlmdbg-リークのはlmdbgランと出力すべて見つかったメモリリークによって生成されたログファイルを解析
の例:の
     $ lmdbg-リーク_log  
    のrealloc(0xbb901c00、888) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804877a
      0x8048584
      0x80484e7
    のmalloc(555) - > 0xbb901400
      0xbbbe58e8
      0xbbbe5b03
      0x8048738
      0x8048584
      0x80484e7
     $
- のlmdbg-SYM のsource.cにアドレスを変換し、それが可能な場合は999
例(GDBは(1)アクションである):
     $ lmdbg-SYM ./_test2 _log
    のmalloc(555) - > 0xbb901400
      0xbbbe58e8
      0xbbbe5b03
      0x8048738     テスト/ test2.c:8メイン
      0x8048584
      0x80484e7
    のrealloc(NULL、666) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804874e     テスト/ test2.c:9主
      0x8048584
      0x80484e7
    のrealloc(0xbb901800、777) - > 0xbb901c00
      0xbbbe58e8
      0xbbbe5a37
      0x8048764     テスト/ test2.c:10       メイン
      0x8048584
      0x80484e7
    のrealloc(0xbb901c00、888) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804877a     テスト/ test2.c:11       メイン
      0x8048584
      0x80484e7
     $
例(addr2lineは(1)は、ここに動作します):
     $ lmdbg-SYM -a ./_test2 _log
    のmalloc(555) - > 0xbb901400
      0xbbbe58e8
      0xbbbe5b03
      0x8048738     テスト/ test2.c:8
      0x8048584
      0x80484e7
    のrealloc(NULL、666) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804874e     テスト/ test2.c:9
      0x8048584
      0x80484e7
    のrealloc(0xbb901800、777) - > 0xbb901c00
      0xbbbe58e8
      0xbbbe5a37
      0x8048764     テスト/ test2.c:10
      0x8048584
      0x80484e7
    のrealloc(0xbb901c00、888) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804877a     テスト/ test2.c:11
      0x8048584
      0x80484e7
     $
- のlmdbg-sysleaks の - grepするか、スキップするシステムメモリリークがテスト/ lmdbg * .confファイルを参照して、libdl、C ++ STLなどのlibcで見つかった。デフォルトの設定ファイルは次のとおりです。〜/ .lmdbg.confと/etc/lmdbg.conf
- のlmdbg の= lmdbgラン+ lmdbg-リーク+ lmdbg-SYM + lmdbg-sysleaks
つまり、lmdbgはオールインワン高いレベルのツールです。
例:
     $ lmdbg -v -o _log ./_test2
    メモリリークをファイルに検出され、保存された「_log」
     $猫_log
    のrealloc(0xbb901c00、888) - > 0xbb901800
      0xbbbe58e8
      0xbbbe5a37
      0x804877a     テスト/ test2.c:11       メイン
      0x8048584
      0x80484e7
    のmalloc(555) - > 0xbb901400
      0xbbbe58e8
      0xbbbe5b03
      0x8048738     テスト/ test2.c:8メイン
      0x8048584
      0x80484e7
     $
のこのリリースのの新機能である:lmdbg-SYM
- もはやセグメンテーションフォールトによりスタックトレース(3)の問題のために。
- gdbのための最適化のために重要なスピードアップがありました。
- lmdbgランでは、GLIBCのmallocのフックは使用されなくなります。
- lmdbg自身のコードはスタックトレースに含まれていませんします。
- は新しい-Nオプションを加え、-vオプションはマイナー修正を受けます。
- lmdbgスタットがフリー(3)またはreallocの(3)スタックトレースが適切なのmalloc / reallocの(3)スタックトレースがなかった場合に現れたのNULLデリファレンスのための修正を受けます。
- 他のマイナーな修正と改良、回帰テストの改善、及び(3)します。 スタックトレースの改善があった
<李>はるかに単純で正確なアドレス変換方法を添加します。
のバージョン1.1.0でのの新機能である:ます。
- 回帰テストで修正します。
- lmdbg·ラン:ゼロのアドレスは、glibcののバック(3)によって生成されたスタックトレースから削除されます。 。
- これはlmdbgスタット(1)でアサーションを修正します。
- ダブル&QUOT;の0x&QUOT。 Infoセクション&QUOT;&QUOTでの問題。 (NetBSDの上で見)固定したします。
- バックトレース(3)の代わりに、組み込みの実装を使用されます。
- lmdbg-SYM:いくつかのバグがシンボルへのアドレスの変換中に固定した。 。
- lmdbgスタット:デバッグしているアプリケーションが強制終了されたときに、不完全今無視しないので、(3)をアサートこれ以上存在している行を読み込むには、S 。
- 代替の実装が削除されました。
libexecinfo(使用可能な場合)から
awkの中で書かれた
のバージョン0.17.0のの新機能は次のとおりです。
- このバージョンでは、改善と修正中の多くを追加しますマニュアルページ、lmdbg-STATをするlmdbg、lmdbgラン、及びlmdbg-SYM、およびマイナーな修正の新機能します。
- lmdbgは単なるメモリリークを見つけることができません、今より多くのことを行うことが可能であるメタツールです。
の の新機能バージョン0.15.1で:のcallocの
- ログ(3)呼び出しが無効になっているglibcのベースのシステム(Linuxでは、GNU / kFreeBSDの、そしておそらく他の人)のでlmdbgランがそれらに失敗します。
- マイナークリーンアップ、修正、および改善。 MK-のconfigure&GT; = 0.20は、建物に必要とされます。
のバージョン0.14.0のの新機能:
- 新しいツール:lmdbgスタット、lmdbg-grepはメモリ割り当てに関する統計情報を収集し、分析するためとlmdbgソートします。
- lmdbg·ラン:lmdbg-実行するための新しいオプション:短縮スタックトレースを生成するための-Sと-Mます。 。
- lmdbg-SYM:lmdbg·ランの出力からプログラム名を取得するための新しいオプション-p 。
- 修正: 'mkcmakeテストは、「一時ファイルを削除します。 。
コメントが見つかりません