我正在研究一个调用一些Perl脚本的Java项目。
如果我从终端运行Perl脚本,它可以正常工作。但是当我使用Java代码中的相同参数调用相同的Perl脚本时,它会失败。这是一个非常奇怪和烦人的错误。
我可以使用EPIC插件在Eclipse中调试Perl。当然,我可以调试Java代码。在Eclipse中的同一个调试会话中调试Java和Perl代码会很有帮助,这样我就可以看到当通过Java代码调用脚本时会发生什么不同。
不确定这是否可行,但如果有人有任何想法,请分享。
感谢。
答案 0 :(得分:1)
Perl具有一些远程调试功能,所以我认为你可以得到你需要的东西。我不使用EPIC,所以我不知道你是否能够在Eclipse中完成所有工作。
将名为PERLDB_OPTS
的环境变量设置为值RemotePort=<host>:<port>
。然后,使用-d
标志启动Perl。它不会尝试与调用终端上的标准IO交互,而是尝试连接到host:port。
这是一个Unix-y示例。我有一个Perl脚本hello.pm
和两个终端窗口打开。
第一个终端
$ nc -l 12345
这使得NetCat成为一个在端口12345上侦听的哑服务器。如果在 Perl启动之前没有服务器监听,它将无法工作。
第二个终端
$ export PERLDB_OPTS=RemotePort=localhost:12345 # set the env variable
$ perl -d hello.pm
现在脚本正在运行。回到第一个终端,我看到了
第一个终端
main::(hello.pm:1): print "hello\n";
DB<1>
我在Perl调试器中准备好了!
我知道至少Komodo IDE支持远程调试,并且doing it with Emacs上有一个Perl Monks帖子,所以即使它不是Eclipse,你也可以获得比命令行更多的东西。好虫狩猎!
答案 1 :(得分:0)
如果我从终端运行Perl脚本,它可以正常工作。但是当我使用Java代码中的相同参数调用相同的Perl脚本时,它会失败。
我建议您检查两个“上下文”中是否运行相同版本的Perl;即从命令行和Java运行Perl应用程序时。
如果这不是问题,请检查环境变量。
解决这个问题的另一种方法是关注程序出错的原因,而不是上下文如何/为何不同。看看你所拥有的证据,并研究收集更多证据的方法......
尝试使用Perl调试器(在IDE或独立)中尝试执行此操作的潜在问题是,您实际上在第三个“上下文”中运行Perl,这可能与现有的一个或两个都不同。
使用调试器可能会起作用......或者它可能会让您更加困惑。