dbx コマンドによるデバッグ

メモリー使用状況検査の使用

RTC を使用すると、使用中のヒープメモリーすべてを確認することができます。この情報によって、プログラムのどこでメモリーが割り当てられたか、またはどのプログラムセクションが大半の動的メモリーを使用しているかを知ることができます。この情報は、プログラムの動的メモリー消費を削減するためにも有効であり、パフォーマンスの向上に役立ちます。

RTC は、パフォーマンス向上または仮想メモリーの使用制御に役立ちます。プログラムが終了したら、メモリー使用状況レポートを生成できます。メモリー使用情報は、メモリーの使用状況を表示させるコマンドを使用して、プログラムの実行中に随時入手することもできます。

メモリー使用状況検査をオンにすると、リーク検査もオンになります。プログラム終了時のリークレポートに加えて、使用中ブロック (biu) レポートも得ることができます。デフォルトでは、使用中ブロックの簡易レポートがプログラムの終了時に生成されます。これは、dbxenv 変数 rtc_biu_at_exit によって指定できます。

次に、典型的な簡易メモリー使用状況レポートを示します。


ブロック使用量の報告   (ブロック使用量: 1   合計サイズ:   32 バイト)

 合計    割合 ブロック  平均     割り当て呼び出しスタック
 サイズ    %    数   サイズ
======= ==== ====== ======  =====================================
     16  40%     2      8  nonleak < main 
      8  20%     1      8  nonleak < main 
      8  20%     1      8  cyclic_leaks < main 
      8  20%     1      8  cyclic_leaks < main 

次に、対応する詳細メモリー使用状況レポートを示します。


ブロック使用量の報告   (ブロック使用量: 4   合計サイズ:   32 バイト)

ブロック使用状況 (biu):
サイズ 8 バイト のブロックをアドレス 0x25498 で見つけました (合計 25.00%)
割り当て時のスタックの状態:
     [1] nonleaks() 行番号 8 "memuse.c"
     [2] nonleaks() 行番号 11 "memuse.c"
     [3] main() 行番号 4 "main.c"

ブロック使用状況(biu):
サイズ 8 バイト のブロックをアドレス 0x25478 で見つけました (合計 25.00%)
割り当て時のスタックの状態:
     [1] nonleaks() 行番号 8 "memuse.c"
     [2] main() 行番号 4 "main.c"

ブロック使用状況 (biu):
サイズ 8 バイト のブロックをアドレス 0x254b8 で見つけました (合計 25.00%)
割り当て時のスタックの状態:
     [1] cycle_leaks() 行番号 17 "memuse.c"
     [2] main() 行番号 5 "main.c"

ブロック使用状況(biu):
サイズ 8 バイト のブロックをアドレス 0x254d8 で見つけました (合計 25.00%)
割り当て時のスタックの状態:
     [1] cycle_leaks() 行番号 18 "memuse.c"
     [2] main() 行番号 5 "main.c"

showmemuse コマンドを使用すると、メモリー使用状況レポートをいつでも要求できます。