日向夏特殊応援部隊

俺様向けメモ

Devel::DProfを使って簡単にプログラムの流れをつかむ

Devel::DProfを使うと簡単にプログラムの流れを把握出来ます。*1

例えばinc::Module::Installの初期化処理ってどんなんだろうと思ったら、

$ perl -d:DProf -Minc::Module::Install -e 'use inc::Module::Install'

ってやるとそのディレクトリにtmon.outってファイルが出来てます。
tmon.outを直接見ても良いのですが、きちんとこのprofileデータをparseするコマンドが付属しています。それがdprofppコマンドです。

下記のような使い方をすると流れがつかめていい感じかもです。

$ dprofpp -T | grep Module::Install | uniq
   inc::Module::Install::BEGIN
   Module::Install::BEGIN
   Module::Install::import
      Module::Install::new
      Module::Install::_caller
      Module::Install::autoload
         Module::Install::_caller
      Module::Install::preload
         Module::Install::load_extensions
            Module::Install::find_extensions
                        Module::Install::__ANON__
            Module::Install::Fetch::BEGIN
               Module::Install::Base::BEGIN
               Module::Install::Base::FakeAdmin::BEGIN
                  Module::Install::Base::__ANON__
            Module::Install::Fetch::BEGIN
            Module::Install::Base::new
            Module::Install::AutoInstall::BEGIN
               Module::Install::Base::BEGIN
               Module::Install::Base::FakeAdmin::BEGIN
                  Module::Install::Base::__ANON__
            Module::Install::AutoInstall::BEGIN
            Module::Install::Base::new
            Module::Install::WriteAll::BEGIN
            Module::Install::Base::new
            Module::Install::Metadata::BEGIN
            Module::Install::Base::new
            Module::Install::Makefile::BEGIN
            Module::Install::Base::new
            Module::Install::Win32::BEGIN
            Module::Install::Base::new
            Module::Install::Include::BEGIN
            Module::Install::Base::new
            Module::Install::Can::BEGIN
            Module::Install::Base::new
         Module::Install::_caller
   Module::Install::import
      Module::Install::new
      Module::Install::_caller
      Module::Install::autoload
         Module::Install::_caller
      Module::Install::preload
         Module::Install::load_extensions
            Module::Install::find_extensions
                        Module::Install::__ANON__
            Module::Install::Fetch::BEGIN
            Module::Install::Base::new
            Module::Install::AutoInstall::BEGIN
               Module::Install::Base::BEGIN
               Module::Install::Base::FakeAdmin::BEGIN
                  Module::Install::Base::__ANON__
            Module::Install::AutoInstall::BEGIN
            Module::Install::Base::new
            Module::Install::WriteAll::BEGIN
            Module::Install::Base::new
            Module::Install::Metadata::BEGIN
            Module::Install::Base::new
            Module::Install::Makefile::BEGIN
            Module::Install::Base::new
            Module::Install::Win32::BEGIN
            Module::Install::Base::new
            Module::Install::Include::BEGIN
            Module::Install::Base::new
            Module::Install::Can::BEGIN
            Module::Install::Base::new
         Module::Install::_caller

Catalystなんかもこれで追いかければ良かったなぁ。