2015-07-11 112 views
0

我收到錯誤使用CPAN和,因爲輸出是相當無益的,訴諸於調試此。繼續命令忽略斷點

$ perl -d /usr/bin/cpan CPAN 

Loading DB routines from perl5db.pl version 1.33 
<...> 
main::(/usr/bin/cpan:2):   eval 'exec /usr/bin/perl -S $0 ${1+"[email protected]"}' 
main::(/usr/bin/cpan:3):    if $running_under_some_shell; 
    DB<1> b /usr/lib/perl5/5.14/HTTP/Tiny.pm:125 
    DB<2> L 
/usr/bin/cpan: 
2:   eval 'exec /usr/bin/perl -S $0 ${1+"[email protected]"}' 
    break if (/usr/lib/perl5/5.14/HTTP/Tiny.pm:125) 
    DB<2> c 

c之後,程序運行完成,忽略斷點。

/usr/lib/perl5/5.14/HTTP/Tiny.pm:125是在任何條件塊之外的以下行。

my $request = { 
    method => $method, 
    scheme => $scheme, 
    host_port => ($port == $DefaultPort{$scheme} ? $host : "$host:$port"), 
    uri  => $path_query, 
    headers => {}, 
}; 

在行142上設置中斷(這是導致我正在調試的錯誤)沒有區別。

L輸出中,它看起來像在當前行而不是我需要的斷點。但是,perldebug列出了b file:line作爲有效的語法。

回答

1

該語法可能是一個較新的補充,我無法讓它在這裏工作。我在Unix上有5.8.8,在Windows上有5.10.1,兩者似乎都不起作用。像我一樣,我在當前行上獲得斷點(它將整個字符串視爲條件)。

我建議使用下面的其他語法。

分段上的方法:

b HTTP::Tiny::some_method 

選擇文件,就行了破裂(其上的路徑相匹配,而不模塊命名空間):

f HTTP/Tiny 
b 125 

如果它們被加載在運行時使用require或eval時,調試器將不會了解模塊,因此您只需在調試器中輸入use HTTP::Tiny即可強制加載該模塊。

+0

事實上,在Perl Git倉庫中指責'perldebug.pod'顯示這是2011-06-16在'076b743fc5f369c78306040642d57f05f84f6dba'中添加的。下一次提交將相應的通知添加到'perldelta.pod'中,搜索當前代碼庫中的哪些通知顯示這是在'5.16.0'中添加的。 –