【问题标题】:Perl PadWalker does not display variables declared with "our"Perl PadWalker 不显示用“我们的”声明的变量
【发布时间】:2013-08-22 15:04:15
【问题描述】:

在 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 表演?

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

【问题讨论】:

  • our 变量是包变量,即没有词法范围,也没有存储在 pad 上。
  • @mob,谢谢。你知道是否有任何其他调试工具/插件可以用来以与词法范围变量相同的方式查看这些变量?
  • 我不熟悉如何将 Eclipse 与 Perl 一起使用。您可以将变量$Junk2::james 添加到变量列表中吗?即使是一个小程序,也会在许多不同的包中定义许多全局变量;默认情况下,Eclipse 可能不想将它们全部添加到变量监视列表中。
  • @mob,用our 声明的变量是词法变量,尽管这些词法变量被别名为包变量。

标签: eclipse perl epic


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    brian d foy 有一个recent post 讨论符号表。

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

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

    【讨论】:

    • 感谢您抽出宝贵时间回答。是否有任何插件可以让我以与在变量窗口中查看词法范围变量相同的方式“查看”包变量?
    • 抱歉,帮不上忙。我不倾向于靠近 Eclipse。
    • our 声明的变量是词法变量,尽管这些词法变量是包变量的别名。
    【解决方案3】:

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

    编辑:

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

    编辑:

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

    我的 $james = $Junk2::james;

    【讨论】:

    • 您好,感谢您抽出宝贵时间回答。不幸的是,这并没有添加包变量:-S
    • 你可能玩过 perl 调试器命令。perldoc.perl.org/perldebug.html
    • 谢谢,就这么做。看起来我可以使用命令行调试器看到包变量......但我真正想要的是能够在 IDE 中看到它们:)
    • 在 IDE 中有一个选项可以更改调试配置。在 Eclipse 中,这是 Debug 按钮的向下箭头。将有一个用于添加 Perl 命令行选项的文本框。
    • 我试过了。恐怕它没有让调试器显示包变量。虽然显示了额外的变量$[...不知道为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2011-07-18
    相关资源
    最近更新 更多