是否可以使用perl -d在perl debuging中启用自动完成功能?

时间:2015-09-17 07:35:16

标签: perl

我在Windows中使用perl -d调试Perl。我正在寻找自动完成功能,因为我必须在其他文件中设置断点,很多次,可能包含长文件夹名称。我在哪里可以为perl -d设置/启用自动完成?

perl -d script.pl

DB<1> f sub_folder1\sub_folder2\sub_folder3\file.pm&lt; - 需要在此处自动完成

2 个答案:

答案 0 :(得分:4)

如果您输入x \%INC,您会看到所包含文件的完整列表,您可以grep,如下所示:

  DB<6> x \%INC
0  HASH(0x1a8e960)
   'Carp.pm' => '/usr/share/perl5/vendor_perl/Carp.pm'
   'Config.pm' => '/usr/lib64/perl5/Config.pm'
   'Config_git.pl' => '/usr/lib64/perl5/Config_git.pl'
   'Config_heavy.pl' => '/usr/lib64/perl5/Config_heavy.pl'
   'Data/Dumper.pm' => '/usr/lib64/perl5/vendor_perl/Data/Dumper.pm'
   'Exporter.pm' => '/usr/share/perl5/vendor_perl/Exporter.pm'
   ....

perl调试器没有内置自动完成功能,但是您可以通过IDE运行调试器来免费自动完成。我使用emacsM-x perldb),它可以轻松处理文件自动完成,并在您单步执行时显示指向代码的指针。

根据调试器内部的帮助,您可以使用部分文件名或正则表达式来减少输入:

DB<1> h f
f filename    Switch to viewing filename. File must be already loaded.
        filename may be either the full name of the file, or a regular
        expression matching the full file name:
        f /home/me/foo.pl and f oo\. may access the same file.
        Evals (with saved bodies) are considered to be filenames:
        f (eval 7) and f eval 7\b access the body of the 7th eval
        (in the order of execution).

以下是一个例子:

DB<3> f Dumper.pm
Choosing /usr/lib64/perl5/vendor_perl/Data/Dumper.pm matching 'Dumper.pm':

答案 1 :(得分:0)

通过https://perldoc.perl.org/perldebug.html安装PadWalker模块,可以在completionHandler下具有一种基本的自动完成形式:

  

如果安装了PadWalker模块,还可以使用基本的命令行完成功能,包括当前作用域中的词法变量。

它不适用于方法名称之类的东西,但这意味着您可以为当前范围内的变量键入DispatchQueue而不是perl -d