About %DB::sub and NYTProf

NYTProfのHTML出力では,サブルーチンが定義された位置に対するリンクがある。これは,%DB::subというデバッグAPI*1を通じて取得している。
perldoc DB:

DB - programmatic interface to the Perl debugging API
(snip)
    %DB::sub
        The keys of this hash are the names of all the known
        subroutines.  Each value is an encoded string that
        has the sprintf(3) format "("%s:%d-%d", filename,
        fromline, toline)".

Moose/Mouseをプロファイルすると,Pure Perlなサブルーチンであるにも関わらずサブルーチン本体へのリンクが生成されないことがあるが,これは,Sub::Nameなどでサブルーチンの名前を強制的に変更したにもかかわらず,%DB::subの更新をしていないためだ。つまり,%DB::subの更新をすれば,NYTProfがサブルーチンの位置を得られるケースが増えるので,その出力がより使いやすくなるはずだ。

そこで,Mouse 0.50_01にその処理を導入してみた。確かに,nytprofhtml(1)に"No file line range data for sub ..."と文句を言われる個数は少なくなった。いくつかのXSUBは依然として文句を言われるが,それらについてはある程度諦めるほかない。

なお,Sub::Nameのディストリビューションにも同様の処理を行うパッチが提案されているようだ。

*1:デバッグAPIデバッグモードのときのみ存在する