在调试器下运行perl程序,直到满足某些条件

时间:2014-03-20 22:01:14

标签: c eclipse perl debugging epic

我在Eclipse中使用perl调试器(通过EPIC插件)。是否有任何功能可以在事件发生之前自动执行这些步骤。例如,我可以在$ args-> {some_arg}设置之前运行它吗?如果没有,最着名的解决方法是什么?此功能或解决方法可能类似于调试其他一些类C语言。

3 个答案:

答案 0 :(得分:1)

在普通的perl调试器中,设置$DB::single = 1;会使您进入调试器。所以你可以拥有以下内容:

  $DB::single = 1 if $args->{some_arg};

我不知道这是否适用于Eclipse。

答案 1 :(得分:1)

我正在寻找的东西实际上跟随所有流程并且在满足条件时停止。但最接近这一点的是条件断点,这可以像Leolo所说的那样起作用。 EPIC实际上支持这一点,但有些版本在某些版本中是错误的。这样做的方法是在某处设置断点后,右键单击它并在“属性”对话框中设置条件。在错误的版本中,属性是菜单中的第三个选项,没有文本。

In faulty versions of EPIC, properties is the third choice in the menu, with no text.

答案 2 :(得分:0)

库存perl调试器有一个 watch w命令。

perl调试器Devel::Trepan也可以有watch命令。

这是一个例子。在档案test.pl中:

my $x = 1;
my $y = 2;
my $x = 3;

现在这是一个示例会话:

trepan.pl test.pl
-- main::(test.pl:1 @0x19b5da8)
my $x = 1;
(trepanpl): watch $y
Watch expression 1: $y set
$DB::D[0] = <undef>
(trepanpl): c
Watchpoint 1: $y changed
------------------------
old value   <undef>
new value   2
wa main::(test.pl:3 @0x1b2a5a8)
my $x = 3;
(trepanpl): 

我应该注意关于观察点的一件事。与通常具有此功能硬件支持的 gdb 相比,情况并非如此。因此,当您使用它时,您的程序可能会变慢,因为调试器会在每个可能的停止点被调用,以检查表达式的值是否已更改。

Devel :: Trepan 还有gdb样式的断点,您可以在其中将条件附加到断点。如果使用观察点会使程序速度过慢,请使用速度更快的程序。

也许有人会为 Devel :: Trepan 编写一个Eclipse插件。