1

设置:

我正在开发一个调用一些 Perl 脚本的 Java 项目。

问题:

如果我从终端运行 Perl 脚本,它工作正常。但是当我从 Java 代码中使用相同的参数调用相同的 Perl 脚本时,它会失败。这是一个非常奇怪和烦人的错误。

我能够使用 EPIC 插件在 Eclipse 中调试 Perl。当然,我可以调试 Java 代码。在 Eclipse 的同一个调试会话中调试 Java 和 Perl 代码会很有帮助,这样我就可以看到通过 Java 代码调用脚本时发生的不同情况。

不确定这是否可能,但如果有人有任何想法,请分享。

谢谢。

4

2 回答 2

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 支持远程调试,并且有一篇 Perl Monks 发布了关于使用 Emacs 进行此操作的文章,因此即使不是 Eclipse,您也可以获得比命令行更多的东西。很好的虫子狩猎!

于 2013-06-01T01:03:45.560 回答
0

如果我从终端运行 Perl 脚本,它工作正常。但是当我从 Java 代码中使用相同的参数调用相同的 Perl 脚本时,它会失败。

我建议您检查一下您在两个“上下文”中运行的 Perl 版本是否相同;即当Perl 应用程序从命令行和Java 运行时。

如果这不是问题,请检查环境变量。


解决这个问题的另一种方法是关注程序出错的原因,而不是上下文如何/为什么不同。查看您拥有的证据,并寻找收集更多证据的方法......


尝试使用 Perl 调试器(在 IDE 中或独立)执行此操作的潜在问题是,您实际上是在第三个“上下文”中运行 Perl,这可能与现有的一个或两个不同。

使用调试器可能会起作用……或者可能会让您更加困惑。

于 2013-06-01T01:21:21.110 回答