如何从特定行开始调试perl程序?

如何从特定行开始调试perl程序?,perl,debugging,foreach,Perl,Debugging,Foreach,环境:Linux CentOS 7@HPC 界面:命令界面,无GUI 我的PERL脚本有一个逻辑错误。它不会在“foreach”循环中通过。我使用下面的调试器命令: perl -d /scripts_location/perlscripts.pl 然而,它是一步一步地运行的。我的脚本有近千行。以下是我的问题: 如何从特定行调试脚本 如何确定循环无法运行?为什么循环不能运行 是否有任何资源可以在整个过程中展示调试器技能 我在网上搜索。他们中的大多数人解释命令。但是很少有人从一开始就介绍调试。

环境:Linux CentOS 7@HPC 界面:命令界面,无GUI

我的PERL脚本有一个逻辑错误。它不会在“foreach”循环中通过。我使用下面的调试器命令:

perl -d /scripts_location/perlscripts.pl
然而,它是一步一步地运行的。我的脚本有近千行。以下是我的问题:

  • 如何从特定行调试脚本

  • 如何确定循环无法运行?为什么循环不能运行

  • 是否有任何资源可以在整个过程中展示调试器技能

    我在网上搜索。他们中的大多数人解释命令。但是很少有人从一开始就介绍调试。我的意思是,首先给出一个简单的程序,在程序中设置断点或其他标签,检查输出或跟踪错误,等等。浏览完网站后,我无法知道如何开始使用PERL调试器进行调试。我习惯于使用特定行的输出调试我的程序,以检查输出是否正确。然而,目前的逻辑错误不能用这种方法计算出来

  • 如有任何进一步建议和帮助,将不胜感激

  • 启动调试器后,您可以告诉它继续,直到到达给定行,例如

    c 124
    
  • 要了解为什么没有输入foreach循环,请在输入前检查循环列表。您可以告诉调试器以如下方式计算表达式:

    x @values
    
    如果循环类似于
    foreach my$value(@values)
    。它可能会告诉你

    empty array
    
    要了解阵列为何为emtpy,可以尝试“监视”阵列

    w @values
    
    然后使用
    r
    运行脚本。一旦任何监视的值发生变化,它将停止

  • 使用
    h
    查看帮助


  • 你能不能在那一行放一个断点,然后点击
    c
    继续执行直到到达断点?谢谢你的建议。我不熟悉调试器。我可以试试。您也可以在代码中的任意点设置
    $DB::single=1
    ,甚至在模块内部或编译时内部(例如
    BEGIN{…}
    块内部)设置断点。