2

如何调试在另一个 perlscript 中使用的 perl 脚本。我们可以分别调试。是否可以一步调试?

前任:

!/user/bin/perl

my $param= 8;

my @res=\`perl extract.pl $config`;

print "The results is ....  @res\n";

同样,我们可以调试在 shell 脚本中使用的 perl 脚本吗?

谢谢。

4

4 回答 4

4

动态解决方案:

my $dswitch = $INC{"perl5db.pl"} ? "-d" : "";
my @res=`perl $dswitch extract.pl $config`;

$INC{"perl5db.pl"}使用调试器时为真,不使用时为假。

于 2012-08-17T15:48:23.310 回答
4

您可以将-dswitch 添加到您正在调用的脚本的 shebang 行:

#!/usr/bin/perl -d
于 2012-08-17T12:41:55.507 回答
3

要做的“正确”事情是更改您的设计,这样您就不会通过系统命令调用其他脚本。然后你将有一个单一的调试环境。

最好的设计是将 extract.pl 制作成一个模块。

您还可以使用该do命令从其他文件导入代码:do 'extract.pl'. 那么唯一需要改变的可能就是你传入的方式$config

这两种方法中的任何一种都非常易于实施,并且对于持续开发还有其他好处。也许您有充分的理由不这样做,但如果您还没有这样做,我会先考虑这一点。

于 2012-08-17T13:27:28.953 回答
0

只需调试extract.pl传入的值$config。如果您不知道它是什么,那么古老的 printf 将为您做到这一点。

say "\$config='$config'";

然后做:

perl -d extract.pl 'Stuff that printed in config'. 

由于两者是隔离的进程,因此唯一的通信是命令行上传递的内容和被调用脚本打印的内容。所以被调用的脚本应该能够在没有调用脚本的情况下进行测试。(除非你设置了某种 IPC 或共享内存或类似的东西。)

于 2012-08-17T13:06:30.047 回答