如何在同一调试会话中调试Eclipse中的Java和Perl代码?

时间:2013-06-01 00:10:56

标签: java eclipse perl debugging

设定:

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

问题:

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

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

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

感谢。

2 个答案:

答案 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,这可能与现有的一个或两个都不同。

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