Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有针对服务器端Perl/CGI的Firebug之类的调试工具?_Perl_Debugging_Testing_Cgi - Fatal编程技术网

是否有针对服务器端Perl/CGI的Firebug之类的调试工具?

是否有针对服务器端Perl/CGI的Firebug之类的调试工具?,perl,debugging,testing,cgi,Perl,Debugging,Testing,Cgi,我非常喜欢使用Firebug调试我的JavaScript代码、HTMLDOM和网络加载,也就是说:关于web开发的所有客户端内容 服务器端的情况并不乐观。我正在开发的应用程序使用Perl和强制性标准模块,如和。我知道,但似乎没有任何调试工具可以跟踪数据库查询或函数调用,并提供良好的输出 特别是输出不能只在STDOUT(想象一下内容类型:application/json)或STDERR(浏览错误日志非常不舒服)上被猛拉,而且该工具不应该要求我手动将补丁程序放入核心模块中,或者将使用Data::Du

我非常喜欢使用Firebug调试我的JavaScript代码、HTMLDOM和网络加载,也就是说:关于web开发的所有客户端内容

服务器端的情况并不乐观。我正在开发的应用程序使用Perl和强制性标准模块,如和。我知道,但似乎没有任何调试工具可以跟踪数据库查询或函数调用,并提供良好的输出

特别是输出不能只在STDOUT(想象一下
内容类型:application/json
)或STDERR(浏览错误日志非常不舒服)上被猛拉,而且该工具不应该要求我手动将补丁程序放入核心模块中,或者将
使用Data::Dumper;打印“”、转储程序($foo)、“”
并将代码全部打印出来

use constant DEBUG => 1;
...;
debug_function($var) if DEBUG;
长话短说:有没有一种工具可以让调试Perl/CGI的服务器端变得像在客户端调试Firebug一样有趣?

没有,没有

你可以做的事情是:

在代码中加入调试代码

BEGIN {require Data::Dumper if DEBUG}
一旦您为部署取消设置
DEBUG
常量,您将不会有任何额外的运行时开销(语句将被优化掉),并且您可以在必要时重新激活它们

你甚至可以说像这样的坏话

BEGIN {
   if (DEBUG) {
      my $oldfunction = \&CORE::function;
      *CORE::function = sub {  # add prototypes if you like them
         debug_handler(@_);
         &$oldfunction;
      };
   }
}
有条件地加载调试模块

如果要覆盖核心函数,为什么不添加调试处理程序?这不是邪恶的修补,而是增强

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
处理程序来执行您想要的操作:

warnings
pragma可以帮助您将重要警告设置为致命警告:

或者,要创建自己的警告,请参阅文档


要获得调用堆栈跟踪,请研究
调用者
函数的多种可能性。基本上,您可能希望构建对
Carp
模块的个人解释,因为
CGI::Carp
可能无法满足您的需要。

是的,但它们依赖于您的需求。Plack是一个位于web框架和web服务器之间的层。Plack消除了服务器之间的差异,为用户提供了一个交流的场所。这些包括数据库和信息,您可以。还有一个,虽然我自己没有用过

现在很多PerlWeb框架(例如Catalyst和Dancer)都使用Plack,但是如果您使用的是纯Perl和CGI,您将无法获得它。幸运的是,在Plack上运行CGI应用程序非常容易。要么,要么


转换为Plack除了调试工具之外还有很多优点,值得付出努力。

除上述功能外,检查,它可以告诉您何时调用命名的子例程,并且可以告诉您何时何地调用了哪些子例程。

更正:
print
。请参阅@stefanmayewsky谢谢你的提示,我将我的示例设置为通用的+1,因为PSGI/Plack是现代的方式。我非常喜欢它允许在运行时加载调试器。Plack::Middleware::Debug看起来不错,但仍然存在一个问题,即它只适用于
内容类型:text/html
,因为它操纵“STDOUT”。@stefanmayewsky是的,您必须临时更改内容类型。否则,它将不得不是一个浏览器插件,我不知道有任何调试服务器端代码。
$SIG{__WARN__} = sub {
    print MYERRORS "There was a warning: $!";
    # do additional error handling unless you're paranoid
}
use warnings qw(FATAL importantWarning);