/usr/local/lib64/perl5/Test/LeakTrace
Edit: /usr/local/lib64/perl5/Test/LeakTrace/JA.pod (10261B)
=encoding utf-8
=head1 NAME
Test::LeakTrace::JA - メモリリークを追跡する
=head1 VERSION
This document describes Test::LeakTrace version 0.15.
=head1 SYNOPSIS
use Test::LeakTrace;
# simple report
leaktrace{
# ...
};
# verbose output
leaktrace{
# ...
} -verbose;
# with callback
leaktrace{
# ...
} sub {
my($ref, $file, $line) = @_;
warn "leaked $ref from $file line\n";
};
my @refs = leaked_refs{
# ...
};
my @info = leaked_info{
# ...
};
my $count = leaked_count{
# ...
};
# standard test interface
use Test::LeakTrace;
no_leaks_ok{
# ...
} "description";
leaks_cmp_ok{
# ...
} '<', 10;
=head1 DESCRIPTION
PerlのGCはリファレンスカウンタを用いたものなので,オブジェクトが開放されるタイミングが明確であることや体感速度が高速であることなど数々の利点があります。
その一方で,循環参照を開放できないこと,Cレベルでの操作でミスしやすいなど,問題点がいくつかあります。それらの問題点のほとんどはメモリリークに関することですから,メモリリークを追跡することは非常に重要な課題です。
C
はメモリリークを追跡するためのいくつかのユーティリティとCベースのテスト関数を提供します。このモジュールはPerlのメモリアロケーションシステムであるアリーナを走査するため,SVに関することであれば与えられたコードのどんなメモリリークでも検出できます。つまり,Perlレベルでの循環参照を始めとして,XSモジュールやPerl自身のバグによるメモリリークを追跡することができます。
ここでB<リーク>とは,特定のスコープ内で新たに作成されて,そのスコープ終了後にも残っている値を意味します。これは,新たに作成されたグローバルな値やPerlが暗黙のうちに作成するキャッシュの値も含みます。たとえば,リーク追跡を行っている最中に新たに名前つきサブルーチンを定義すれば,それはリークとみなされます。また,継承したメソッドを呼び出したり,オブジェクトを作成したりするだけで様々なキャッシュが生成され,リークが報告される可能性があります。
=head1 INTERFACE
=head2 Exported functions
=head3 C<< leaked_info { BLOCK } >>
Iを実行し,追跡結果をリストで返します。
結果はリークした値のリファレンス,ファイル名,行番号の三要素を持つ配列,つまりC<< [$ref, $file, $line] >>のリストとなっています。
なお,この関数はPerl内部で使用する値を返す可能性があります。そのような内部用の値を変更するとPerl実行環境に致命的な影響を与える可能性があるので注意してください。また,配列やハッシュの要素として,リファレンスではない配列やハッシュそれ自体が含まれる可能性があります。そのような値は通常Perlレベルで操作することができません。たとえばCなどで出力することはできません。
=head3 C<< leaked_refs { BLOCK } >>
Iを実行し,リークしたSVのリファレンスのリストを返します。
C<< map{ $_->[0] } leaked_info{ BLOCK } >>と同じですが,より高速です。
=head3 C<< leaked_count { BLOCK } >>
Iを実行し,リークしたSVのリファレンスの個数を返します。
CとCもスカラコンテキストでは個数を返しますが,
Cはコンテキストに依存しません。
=head3 C<< leaktrace { BLOCK } ?($mode | \&callback) >>
Iを実行し,その中で起きたメモリリークをC<*STDERR>に報告します。
メモリリークの報告はI<$mode>で指定したモードに従います。
受け付けるI<$mode>は以下の通りです:
=over 4
=item -simple
デフォルトのモードです。リークしたSVの型とアドレス,ファイル名,行番号を報告します。
=item -sv_dump
B<-simple>に加えて,CでSVの中身をダンプします。
これは,Cの出力とほぼ同じです。
=item -lines
B<-simple>に加えて,リークしていると見られる行の周辺を出力します。
=item -verbose
B<-simple>とB<-sv_dump>とB<-lines>の全てを出力します。
=back
より細かな制御のためにコールバックを指定することもできます。
I<\&callback>はリークしたSV毎に呼び出され,その引数はリークしたSVのリファレンス,ファイル名,行番号の3つです。
=head3 C<< no_leaks_ok { BLOCK } ?$description >>
Iにメモリリークがないことテストします。
これはCベースのテスト関数です。
なお,Iは複数回実行されます。これは,初回の実行でキャッシュを用意する可能性を考慮するためです。
=head3 C<< leaks_cmp_ok { BLOCK } $cmp_op, $count, ?$description >>
Iのメモリリーク数と特定の数値を比較するテストを行います。
これはCベースのテスト関数です。
なお,Iは複数回実行されます。これは,初回の実行でキャッシュを用意する可能性を考慮するためです。
=head2 Script interface
Cと同様に,スクリプトのリーク追跡のためにCが提供されます。C