首页 > 解决方案 > 如何将工作断点设置为常量表达式?

问题描述

我有 Perl 代码,它使用带有初始化块的常量,如下所示:

use constant C => map {
    ...;
} (0..255);

当我尝试在该行设置断点...;时,它不起作用,这意味着:我可以设置断点,但调试器不会停在那里。

我试过了:

  1. 使用调试器启动程序 ( perl -d program.pl)
  2. 在调试器中设置断点 ( b 2)
  3. 使用 重新加载R,然后运行 ​​( r) 程序

但是调试器仍然没有停在该行,就好像我没有设置断点一样。

我的 Perl 不是最新的;它是 5.18.2,以防万一……

标签: perldebuggingbreakpointsconstant-expression

解决方案


use您正试图在一个块中放置一个断点。use 块实际上是一个BEGIN带有 a 的块require。Perl 调试器默认不会在编译阶段停止。BEGIN但是,您可以通过将变量设置为来强制 Perl 调试器进入块$DB::single内的单步模式1

Debugging Compile-Time Statements_perldoc perldebug

如果您将代码更改为

use constant C => map {
    $DB::single = 1;
    ...;
} (0..255);

Perl 调试器将在 use 语句中停止。


推荐阅读