perldoc DB 내가 디버거의 'R'(다시 시작) 명령의 싼 트릭을 선호합니다. 여기에 샘플 프로그램이 있습니다 :
#/usr/bin/perl -d
use strict;
use warnings;
use WWW::Mechanize;
my $agent = WWW::Mechanize->new();
그리고 우리는 LWP :: UserAgent의 new() 메소드에서 중단하고 싶다고 가정 해 봅시다.이 작업을 수행합니다 :
bash$ perl -d sample.pl --whatever-arguments
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(use_mech.pl:7): my $foo = WWW::Mechanize::Pluggable->new();
로드 모듈은 당신이 중단 점을 설정하려면 : 당신은 그냥합니다 ('F'를 할 필요가로드 된 파일 알아낼
DB<1> use LWP::UserAgent
인쇄의 @INC 항목을 명령
DB<3> f /Users/joemcmahon/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/LWP/UserAgent.pm
1 package LWP::UserAgent;
2
3: use strict;
4: use vars qw(@ISA $VERSION);
5
6: require LWP::MemberMixin;
7: @ISA = qw(LWP::MemberMixin);
8: $VERSION = "6.04";
9
10: use HTTP::Request();
:) : 'F'에 해당 파일
는
DB<2> p $INC{"LWP/UserAgent.pm"}
/Users/joemcmahon/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/LWP/UserAgent.pm
스위치
우리는) (새에 헤어지고 싶어, 그래서 그것을 발견 :
DB<5> l
20 sub new
21 {
22 # Check for common user mistake
23: Carp::croak("Options to LWP::UserAgent should be key/value pairs, not hash reference")
24 if ref($_[1]) eq 'HASH';
25
26: my($class, %cnf) = @_;
27
28: my $agent = delete $cnf{agent};
29: my $from = delete $cnf{from};
이 줄에 중단 점을 설정 :
DB<4> /new
20: sub new
는 'L'을 통해 하위의 첫 번째 실행 문을 찾기
을
DB<5> b 23
다시 시작 디버거 :
DB<6> R
Warning: some settings and command-line options may be lost!
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(use_mech.pl:7): my $foo = WWW::Mechanize::Pluggable->new();
프로그램을 실행하면 원하는 시점에 중단됩니다.
DB<6> c
LWP::UserAgent::new(/Users/joemcmahon/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/LWP/UserAgent.pm:23):
23: Carp::croak("Options to LWP::UserAgent should be key/value pairs, not hash reference")
24: if ref($_[1]) eq 'HASH';
DB<6>
이 기술은 import() 문제를 디버깅 할 때 특히 편리합니다. 문제가있는 모듈을로드 할 수 있습니다. import()에 중단 점을 설정 한 다음 다시 시작하십시오. 디버거는 관심있는 모듈의 import()에서 멈추게됩니다.
나는 이것을 결코 알 수 없었습니다. upvoted 대답을 받아들이 기 때문에이 질문은 답이 없습니다. – Morinar