2012-11-06 40 views
4

我在使用“perl -d”开关在SuSe Linux上调试perl程序。在调试Perl代码期间修改变量值

调试时,该程序报告XYZ variable is not set

我怎样才能设置XYZ的调试器内的价值?

我试图在调试器内部但不工作。

set XYZ=ABC 
my $XYZ=ABC 
setenv XYZ ABC 

我在这方面做了一些谷歌。但找不到我想要的。

+2

你可以显示报告它的程序部分吗? – choroba

+1

Perl不会发出该消息。什么是你得到的实际信息? – ikegami

+0

@ikegami:Perl没有报告它。我的计划报道。 ;-) –

回答

4

调试控制台采用Perl表达式,因此如果它是字符串,则需要引用该值。

您必须将程序移动到引发错误的行之前(查看断点,它在调试器中为b <line>),然后设置该值。

> $XYZ='ABC' 

这里有一个很好的资源:http://obsidianrook.com/devnotes/talks/perl_debugger/

+0

谢谢。这解决了我的问题。 :) –

+0

@simbabque:你可以在使用“Eclipse”调试器时做到这一点吗? (用Perl插件“EPIC”)? –

+0

@HelenCraigman可能。我从来没有使用Eclipse调试器,但它肯定会吸引,如果它不能这样做。 Komodo调试器可以做到这一点,所以我相当确定Eclipse可以。你很可能通过点击行号(或靠近它们)来设置断点。您也可以使用具有向下箭头的按钮来浏览代码。这就像任何图形调试器,例如在Firebug中的JS调试器。看看这个:http://www.ibm.com/developerworks/cn/education/opensource/os-epic/ – simbabque

2

假设你正在试图$ XYZ设置为字符串ABC尝试:

$XYZ = 'ABC' 

如果使用

my $XYZ='ABC' 

它将仅在当前范围中定义变量$ XYZ。从调试器中的测试看来,该范围不会扩展到调试控制台之外(即只能在控制台的该行上访问)。例如。

DB<2> my $x = "hello"; print "$x" 
hello 
    DB<3> print $x 
Use of uninitialized value $x in print at (eval 8)[/usr/share/perl/5.12/perl5db.pl:638] line 2. 
+0

非常好的例子! – simbabque