在perl中,$DB :: single = 1和2之间有什么区别?
在代码中放置$DB :: single = 1和$DB :: single = 2有什么区别?当我在perl调试器命令行上执行’c’时,两者似乎都具有停止执行后的执行相同的效果.
解决方法
从
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代码本身中断执行,通过设置通常由调试器设置的变量命令. 这就是为什么不重要的价值,因为你强迫调试器处于特定状态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |