【问题标题】:Perl: debugging interpreter failure?Perl:调试解释器失败?
【发布时间】:2014-10-25 06:36:27
【问题描述】:

我在 Perl 中遇到了一个我认为不是我的代码的问题。我有这个重入子程序:

sub foo
{
   my $depth = $_[0];
   my $input = $_[1];

   my $result = mymodule::do_calc($input);
   if ($result) { foo($depth+1,$result); }

   print "mark $depth\n";
}

该程序按原样运行良好。但是,如果我注释掉打印行,程序就会进入无限循环。

如果我在 foo 调用之前放置一个断点,我可以看到 $depth 正在获取哈希引用的值。有了打印线,它就不会了。

有人知道从这里去哪里吗?我猜我正在触发某种解释器错误?

【问题讨论】:

  • 只要$result 为真foo 就会调用自己,所以一切都取决于你的module::do_calc 函数的作用。如果do_calc 一直返回一个真值,它将导致foofoo 内的无限调用,由于堆栈深度有限,一段时间后应该以错误结束。不幸的是,您没有发布 do_calc 函数,因此无法预测您的代码在做什么。

标签: perl debugging


【解决方案1】:

在代码中的其他地方,$input 和 $depth 之间存在关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2011-05-15
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多