我尝试了几种方法,没有工作:
b file:line
f file
b line
b load <file>
这里有什么问题?
答案 0 :(得分:2)
我不完全理解你的问题,但perl调试器中'b'的所有选项都可以用'h b'查看:
DB<3> h b
b Sets breakpoint on current line)
b [line] [condition]
Set breakpoint; line defaults to the current execution line;
condition breaks if it evaluates to true, defaults to '1'.
b subname [condition]
Set breakpoint at first line of subroutine.
b $var Set breakpoint at first line of subroutine referenced by $var.
b load filename Set breakpoint on 'require'ing the given file.
b postpone subname [condition]
Set breakpoint at first line of subroutine after
it is compiled.
b compile subname
Stop after the subroutine is compiled.
似乎没有“所有案例的一种用法”模式。根据我的经验,你可以:
加载您感兴趣的模块后,您可以使用'b [subname]'模式。不要忘记您可能需要使用包名称完全限定子名称:
DB<5> use JSON;
DB<6> b JSON::import
DB<7> JSON->import
JSON::import(/opt/xt/xt-perl/lib/site_perl/5.12.4/JSON.pm:78):
78: my $pkg = shift;
auto(-1) DB<<8>> v
75
76
77 sub import {
78==>b my $pkg = shift;
79: my @what_to_export;
80: my $no_export;
81
82: for my $tag (@_) {
83: if ($tag eq '-support_by_pp') {
84: if (!$_ALLOW_UNSUPPORTED++) {
你也可以
并且只是'c'继续通过调试器,直到你在代码中加热该行。必须在源代码中添加和删除特殊标记违反了调试的一般原则,但有时可以在某个困难或缓慢的地方轻松停止,以便通过调试器步进。
答案 1 :(得分:1)
我想,你已经在调试器中启动了一个perl脚本,它使用了一些包含一些软件包的模块。
您可以使用调试器命令S
列出可用的子例程。可选的正则表达式模式可用于过滤列表:
S [[!]pat] List subroutine names [not] matching pattern
要为某个包中的函数设置断点,可以使用此形式的断点命令b package::function
。我猜想它可以更好地记录下来。
前段时间我遇到了同样的问题,我现在就这样使用它了。
更新:我刚检查了序列
f file
b line
当模块加载 use package
或require package
之前,这适用于我。 file
的路径是相对于当前目录指定的。