2010-07-30 12 views
3

我在想如果Devel::NYTProf可以用作另一個庫中的庫。我想做類似以下的事情如何在庫中使用NYTProf

around 'somesub' => sub { 
    my $orig = shift; 
    my $self = shift; 
    start-timing; 
    $self->$orig(@_); 
    end-timing; 
    print '$time'; 
} 

但從它的文檔我無法確定它是否可以像這樣使用。可能嗎?有人能告訴我我會做的API調用嗎?

+0

當你嘗試它時會發生什麼? – Ether 2010-07-30 16:05:55

+0

嘗試做什麼?我一直無法找出一個訪問NYTProf的API來嘗試它。 – xenoterracide 2010-07-30 16:26:43

回答

4

最簡單,最可靠的事情看看是:

  1. 添加在您的圖書館DB::enable_profileDB::disable_profile電話(你可能要檢查是否潛艇是第一個定義,以防止NYTProf沒有加載時發生破損)。
  2. 在環境中以-d:NYTProf和NYTPROF=start=no開始perl。

所有這一切都在Devel::NYTProf docs中有相當清楚的解釋。

你可以嘗試讓你的圖書館有條件地加載NYTProf,但是這裏的交易是隻編譯後編輯 NYTProf被加載得到任何跟蹤點。這聽起來可能完全沒問題,因爲你只想分析你的庫,但是不清楚如果你的庫調用(或者回調)任何其他代碼會發生什麼,而且我沒有測試它。製作簡單版本可能會容易得多:)

0

我不認爲它可以這樣使用。但是,你可能在Aspect::Library::ProfilerAspect::Library::Timer

+0

使用這些的優點是什麼?好奇地是Profiler提到了Benchmark :: Timer在Benchmark :: Timer上有什麼優勢? – xenoterracide 2010-07-30 16:48:57

+0

您可以將它們添加到程序的各個部分中,而無需實際更改程序代碼(它是面向方面編程)。參見http://use.perl.org/~Alias/journal/40457 它也提到了Aspect :: Library :: NYTProf,它可能是你正在尋找的東西。 – mpeters 2010-08-01 02:13:28