在perl中,$DB :: single = 1和2之间有什么区别?

前端之家收集整理的这篇文章主要介绍了在perl中,$DB :: single = 1和2之间有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
代码中放置$DB :: single = 1和$DB :: single = 2有什么区别?当我在perl调试器命令行上执行’c’时,两者似乎都具有停止执行后的执行相同的效果.

perldebug表示,值1相当于刚刚按下“下一步”,2与“n”相同,但是如何达成声明有什么区别?

解决方法

perldebug

如果将$DB :: single设置为2,则相当于刚刚输入n命令(通过子程序调用执行),而值为1表示s命令(进入子程序调用).

你已经知道了

用户的角度来看,我确信没有任何区别.我以此为基础来检查实际的DB.pm source code.

我们来逻辑地跟着.您可能需要参考源代码.我已经简化了一些代码,以消除不必要的细节,但是您应该可以从我的描述中获得想法.

当您在调试器中执行代码时,至少有两个重要的变量,即运行和单个.这些的组合是决定代码是否运行:

running  single  description
-------  ------  -----------
   0       ?     not running
   1       0     running flat-out
   1       1     single stepping,execute into function
   1       2     single stepping,execute over function

DB()函数是为每一行执行的,它包含以下代码段,如果已经设置了单个行,它将停止运行(它总是执行当前行):

if ($DB::single) {
    $DB::single = 0;
    $running = 0;
}

这就是为什么,如果你在Perl代码中设置变量,它会在下一行断开(通过break,我的意思是“停止运行代码”,而不是“损坏某种程度”)调试器.

当运行为0时,DB()函数进入这个小循环:

# Now sit in an event loop until something sets $running
do {
    $c->idle;          # call client event loop; must not block
} until $running;

换句话说,它等待用户命令设置运行回到1.这可以通过以下三个功能之一完成:

sub next {
    $DB::single = 2;
    $running = 1;
}

sub step {
    $DB::single = 1;
    $running = 1;
}

sub cont {
    $DB::single = 0;
    $running = 1;
}

您可以看到,这三个命令设置了单个和运行的不同组合,这将在执行下一个Perl行时使用(参见前面的表格,以了解这些组合是什么意思).

在Perl代码中使用1或2的能力是直接的结果,因为您使用一个鬼祟而聪明的技巧来从Perl代码本身中断执行,通过设置通常由调试器设置的变量命令.

这就是为什么不重要的价值,因为你强迫调试器处于特定状态.

猜你在找的Perl相关文章