设定:
我正在研究一个Java项目,该项目调用了一些Perl脚本。
问题:
如果我从终端运行Perl脚本,它将运行正常。但是,当我从Java代码中使用相同的参数调用相同的Perl脚本时,它将失败。这是一个非常奇怪和烦人的错误。
我可以使用EPIC插件在Eclipse中调试Perl。当然,我可以调试Java代码。在Eclipse的同一调试会话中调试Java和Perl代码将很有帮助,这样我可以看到通过Java代码调用脚本时发生了什么不同。
不知道这是否有可能,但是如果有人有任何想法,请分享。
谢谢。
最佳答案
我认为Perl具有一些远程调试功能,因此您可以得到所需的东西。我不使用EPIC,所以我不知道您是否能够在Eclipse中完成所有操作。
将名为PERLDB_OPTS
的环境变量设置为值RemotePort=<host>:<port>
。然后,使用-d
标志启动Perl。调试器将尝试连接到host:port,而不是尝试与调用终端上的标准IO进行交互。
这是一个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,您也可以获得比命令行更多的东西。善于寻找错误!