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

Leo*_*eon 2 debugging perl foreach

环境:Linux CentOS 7 @HPC接口:命令接口,无GUI

我的PERL脚本有一个逻辑错误.它不会在"foreach"循环中完成.我在下面使用调试器命令:

perl -d /scripts_location/perlscripts.pl
Run Code Online (Sandbox Code Playgroud)

但是,它是一步一步运行的.我的脚本有近千行.这是我的问题:

  1. 如何从特定行调试我的脚本?
  2. 怎么弄清楚循环不能运行?为什么循环不能运行?
  3. 是否有任何资源可以在整个过程中显示调试器技能?

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

  4. 任何进一步的建议和帮助将受到高度赞赏.

cho*_*oba 5

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

    c 124
    
    Run Code Online (Sandbox Code Playgroud)
  2. 要弄清楚为什么没有输入foreach循环,请在输入之前检查循环列表.您可以告诉调试器像这样评估表达式:

    x @values
    
    Run Code Online (Sandbox Code Playgroud)

    如果循环是这样的foreach my $value (@values).它可能会告诉你

    empty array
    
    Run Code Online (Sandbox Code Playgroud)

    要发现数组为emtpy的原因,您可以尝试"观察"数组

    w @values
    
    Run Code Online (Sandbox Code Playgroud)

    然后运行脚本r.一旦观察到的值发生变化,它就会停止.

  3. 使用h可查看帮助.

  • 您还可以在代码中的任何位置设置`$ DB :: single = 1`,甚至在模块内部或编译时(例如,在`BEGIN {...}`块内)设置断点. (2认同)