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のディストリビューションにも同様の処理を行うパッチが提案されているようだ。