不,不是真的。
事情你可以做的是:
與調試代碼灑上你的代碼。
use constant DEBUG => 1;
...;
debug_function($var) if DEBUG;
一旦您取消設置進行部署DEBUG
不斷,你不會有任何額外的費用運行時(在報表會被優化掉),你可以隨時neccessary重新激活它們。
,你甚至可以說喜歡
BEGIN {require Data::Dumper if DEBUG}
有條件負荷調試模塊邪惡的東西。
如果你想覆蓋核心函數,爲什麼不添加調試處理程序?這不是邪惡的補丁,這是增加...
BEGIN {
if (DEBUG) {
my $oldfunction = \&CORE::function;
*CORE::function = sub { # add prototypes if you like them
debug_handler(@_);
&$oldfunction;
};
}
}
使用此技術將您的調用登錄到您的數據庫。
您可以重新打開STDERR
一些特殊的文件(或管道,或終端,或......)
BEGIN {
if (DEBUG) {
close STDERR or die "STDERR hates me and doesn't want to be closed.";
open STDERR, '>', "/path/to/my/error/log.file" or die "couldn't open error log";
}
}
您可以定義DIE
和WARN
處理程序做一些你想:
$SIG{__WARN__} = sub {
print MYERRORS "There was a warning: $!";
# do additional error handling unless you're paranoid
}
的warnings
編譯可以幫助你做出了重要的警告致命的:
use warnings qw(FATAL importantWarning);
,或者創建自己的警告,只看到文檔
而獲得調用堆棧跟蹤,窺視caller
功能的多種可能性。從本質上講,您可能希望構建您對Carp
模塊的個人解釋,因爲CGI::Carp
可能無法滿足您的需求。
+1,因爲PSGI/Plack是現代化的方式。我真的很喜歡[Enbugger](https://metacpan.org/module/Enbugger),它允許在運行時加載調試器。 – 2012-08-06 03:05:31
Plack :: Middleware :: Debug看起來不錯,但仍然存在這樣的問題,即它只處理'Content-Type:text/html',因爲它處理了「STDOUT」。 – 2012-08-06 13:43:40
@StefanMajewsky是的,你必須暫時改變內容類型。否則,它將不得不是一個瀏覽器插件,我不知道任何要調試的服務器端代碼。 – Schwern 2012-08-07 01:12:34