在Eclipse和PadWalker中遇到Perl调试器的一些问题。以前只用于简单的单文件脚本。使用“my”声明的变量。它们在调试器“变量”窗口中看起来很好。
现在我正在使用别人更复杂的脚本,我没有看到使用“我们的”声明变量。为了调查,我把它归结为一个非常简单的例子
junk.pl:
use strict;
use warnings;
require 'junk2.pl';
package Junk;
my $simon = "SOMETHING";
print "JUNK " . $Junk2::james . "\n";
print "JUNK " . $simon . "\n";
junk2.pl:
package Junk2;
our $james;
$james = "FOO";
1;
单步执行代码,可修复my $simon
在调试器窗口中显示正常,但变量our $james
则不然。调试器工作正常:程序运行,输出窗口显示正确的输出...它只是变量窗口无法显示$james
。
下面的屏幕截图显示了问题。正如您所看到的,Junk2包中的变量$james
打印正常,但不会出现在变量显示中。
一直在寻找解决方案,但找不到任何匹配好的东西......有什么想法吗?
编辑:如果我使用Perl调试器,我发现我可以“看到”包变量: 。有没有办法在IDE中以友好的方式获得相同的输出,如padwalker节目?
感谢迄今为止回答过的人:)
答案 0 :(得分:5)
您可以在变量视图菜单下切换查看本地和全局变量。使用我们声明的变量超出了局部范围,因此在选择全局变量选项时可见。 (我正在运行eclipse 4.2.1)
要访问变量视图菜单,请单击变量窗格右上角的小向下箭头。
答案 1 :(得分:4)
用our声明的变量是词法变量,别名为包变量(谢谢@ikegami进行更正):
our
为当前包中同名的包变量创建一个词法别名,以便在当前词法范围内使用。
brian d foy有一个recent post讨论符号表。
简短的回答是,您可以通过查看包的符号表来访问包变量。
此外,PadWalker还有peek_our
方法。 Package::Stash提供了其他有用的帮助。
答案 2 :(得分:2)
在Eclipse调试配置中-X到Perl命令行以显示当前包变量。
编辑:
在这种情况下,您可能需要使用-V命令。 见http://perldoc.perl.org/perldebug.html
编辑:
将Junk2 :: James变量分配给局部变量可能更容易。
my $ james = $ Junk2 :: james;