3

Eclipse 和 PadWalker 中的 Perl 调试器存在一些问题。之前只将它用于简单的单文件脚本。使用“my”声明的变量。它们在调试器“变量”窗口中显示良好。

现在我正在使用别人的更复杂的脚本,我没有看到使用“我们的”声明的变量。为了调查,我把它归结为一个非常简单的例子

垃圾.pl:

use strict;
use warnings;

require 'junk2.pl';

package Junk;
my $simon = "SOMETHING";
print "JUNK  " . $Junk2::james . "\n";
print "JUNK  " . $simon . "\n";

垃圾2.pl:

package Junk2;
our $james;
$james = "FOO";

1;

单步执行代码,my $simon调试器窗口中的变量显示正常,但变量our $james没有。调试器工作正常:程序运行,输出窗口显示正确的输出......只是变量窗口无法显示$james

下面的屏幕截图演示了该问题。如您所见,$jamesJunk2 包中的变量打印正常,但未出现在变量显示中。

没有包变量的 IDE 调试器视图

一直在寻找解决方案,但找不到任何匹配的东西......有什么想法吗?

编辑:发现如果我使用 Perl 调试器,我可以“看到”包变量: 命令行调试器视图.

有没有办法在 IDE 中以友好的方式获得相同的输出,比如 padwalker 节目?

感谢到目前为止已经回答的人:)

4

3 回答 3

5

您可以在变量视图菜单下切换查看局部变量和全局变量。使用 our 声明的变量在本地范围之外,因此在选择全局变量选项时可见。(我正在运行 Eclipse 4.2.1)

要访问变量视图菜单,请单击变量窗格右上角的小向下箭头。

于 2014-10-24T15:50:13.323 回答
4

用我们声明的变量是词法变量,别名为包变量(感谢@ikegami 的更正):

our为当前包中的同名包变量创建一个词法别名,以便在当前词法范围内使用。

brian d foy最近发表了一篇讨论符号表的文章。

简短的回答是,您可以通过查看包的符号表来访问包变量。

此外,PadWalker有一个peek_our方法。Package::Stash提供了其他有用的助手。

于 2013-08-22T15:33:13.643 回答
2

在 Eclipse Debug Configuration 处 -X 到 Perl 命令行以显示当前包变量。

编辑:

在这种情况下,您可能需要改用 -​​V 命令。请参阅http://perldoc.perl.org/perldebug.html

编辑:

将 Junk2::Jame​​s 变量分配给局部变量可能会更容易。

我的 $james = $Junk2::james;

于 2013-08-22T15:30:58.633 回答