调用Perl调试器,使其运行到第一个断点

前端之家收集整理的这篇文章主要介绍了调用Perl调试器,使其运行到第一个断点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用perl -d myscript.pl调用我的Perl调试器时,调试器启动,但是在我按n(下一个)或c(继续)之前它不会执行任何代码.

无论如何都要调用调试器并让它默认运行代码直到遇到断点?

如果是这样,是否有任何语句可以在我的代码中用作断点,以使调试器在它到达时停止?

更新:

这是我在.perldb文件中的内容

print "Reading ~/.perldb options.\n";
push @DB::typeahead,"c";
parse_options("NonStop=1");

这是我的hello_world.pl文件

use strict;
use warnings;

print "Hello world.\n"; 
$DB::single=1;
print "How are you?";

以下是运行的调试会话:perl -d hello_world.pl:

Reading ~/.perldb options.
Hello world
main::(hello_world.pl:6):       print "How are you?";
auto(-1)  DB<1> c
Debugged program terminated.  Use q to quit or R to restart,use o inhibit_exit to avoid stopping after program termination,h q,h R or h o to get additional info.  
  DB<1> v
9563    9564    
9565    sub at_exit {
9566==>     "Debugged program terminated.  Use `q' to quit or `R' to restart.";
9567    }
9568    
9569    package DB;    # Do not trace this 1; below!
  DB<1>

换句话说,我的调试器会跳过打印“你好吗?”,而是在程序完成后停止,这不是我想要的.

我想要的是调试器运行我的代码而不停止任何地方(也不是在我的脚本的开头和结尾),除非我明确地有一个$DB :: single = 1;声明,在这种情况下,我希望它在运行下一行之前停止.有什么办法吗?

作为参考,我正在使用:

$perl --version 

This is perl 5,version 14,subversion 1 (v5.14.1) built for x86_64-linux

解决方法

$DB::single = 1;

在任何在代码中设置永久断点的语句之前.
这也适用于编译时代码,并且可能是在编译阶段设置断点的唯一好方法.

要让调试器自动启动代码,您可以在.perldb文件代码中的编译时(BEGIN)块中操作@DB :: typeahead数组.例如:

# .perldb file
push @DB::typeahead,"c";

要么

BEGIN { push @DB::typeahead,"p 'Hello!'","c" }
...
$DB::single = 1;
$x = want_to_stop_here();

您还可以在.perldb或PERLDB_OPTS环境变量中设置“NonStop”选项:

PERLDB_OPTS=NonStop perl -d myprogram.pl

所有这些(以及更多)都在perldebugperl5db.pl的内部深入讨论

更新:

解决最近更新中提出的问题.在./perldb中使用以下内容

print "Reading ~/.perldb options.\n";
push @DB::typeahead,"c";
parse_options("inhibit_exit=0");

猜你在找的Perl相关文章