我可以在源perl程序中插入断点吗?

Tho*_*son 16 debugging perl

当某些情况发生时我想要perl程序启动调试器.其他一些语言的库支持debug()语句,perl中是否有类似的语句?

Nic*_*son 34

如果我理解正确,您需要在代码中使用特定的调试器变量 - $DB::single.在代码中将此值设置为true将导致调试器在该行上停止.

$x = 1234;
$DB::single = 1;
enter_problematic_sub_now();
Run Code Online (Sandbox Code Playgroud)

然后,您的代码将停止在$ DB :: single设置为1的行.

当然,如果您无法确保代码在调试器中运行,那么您将完全遇到另一个问题.您需要运行代码perl -d.

  • @Thompson:是的,没错.如果要调试Perl程序,则必须在调试器下运行它.据我所知,这种事情适用于其他语言的大多数基于源的实时调试 - 尽管有了coredumps的事后调查. (3认同)

iva*_*cho 7

您是否尝试将-d开关添加到脚本顶部的shebang行?就像是

#!/usr/bin/perl -d
use strict;
use warnings;
$|=1;$\="\n";

print "Test";
Run Code Online (Sandbox Code Playgroud)

它确实取决于它是如何启动的,但至少在简单的情况下,这应该启动调试器.

编辑:然后,您可以使用特定条件在特定行上设置断点

> b [line] [condition]
Run Code Online (Sandbox Code Playgroud)

并击中

> c
Run Code Online (Sandbox Code Playgroud)

继续运行脚本 - 调试器将在满足条件时停在指定的行