我尝试使用Devel::Trace作为代码的调试器来获取perl堆栈跟踪。
perl -d:Trace <pgm>还尝试在perl代码中使用$Devel::Trace::TRACE = 0;和Devel::Trace::trace('on');。但却找不到踪迹。
有人能用一个例子来说明Devel::Trace在perl代码中的用法吗?
发布于 2013-12-12 10:18:36
Devel::Trace不生成堆栈跟踪。相反,它打印出当前正在执行的语句。示例:
$ cat script.pl
use feature 'say';
my $foo = "bar";
say $foo;
$ perl -d:Trace script.pl
>> script.pl:2: my $foo = "bar";
>> script.pl:3: say $foo;
bar在代码中,可以为某些区域打开或关闭跟踪:
$ cat script.pl
use feature 'say';
my $foo = "bar";
for my $n (1 .. 3) {
local $Devel::Trace::TRACE = 0;
say $foo x $n;
}
say "That were some ${foo}s";
$ perl -d:Trace script.pl
>> script.pl:2: my $foo = "bar";
>> script.pl:3: for my $n (1 .. 3) {
>> script.pl:4: local $Devel::Trace::TRACE = 0;
bar
>> script.pl:4: local $Devel::Trace::TRACE = 0;
barbar
>> script.pl:4: local $Devel::Trace::TRACE = 0;
barbarbar
>> script.pl:7: say "That were some ${foo}s";
That were some bars如您所见,say $foo x $n行不包含在跟踪输出中,因为我在该范围内转了跟踪。
如果您想要堆栈跟踪(如“调用堆栈跟踪”中所示),请使用Carp模块:
$ cat script.pl
use Carp ();
foo("Hello World");
sub foo { bar(@_) }
sub bar { baz(@_) }
sub baz { qux(@_) }
sub qux { Carp::cluck "Howdy!" }
$ perl script.pl
Howdy! at so1.pl line 8.
main::qux('Hello World') called at script.pl line 7
main::baz('Hello World') called at script.pl line 6
main::bar('Hello World') called at script.pl line 5
main::foo('Hello World') called at script.pl line 3https://stackoverflow.com/questions/20538994
复制相似问题