2012-01-19 1 views
17

программа My Perl выглядит следующим образом:Как установить точку останова для определенного файла в программе Perl?

foo/ 
foo/bar/ 
for/bar/test.pm 
foo.pm 
foo/bar.pm 
test.pl 

и использовать perl test.pl, чтобы запустить программу. Я хочу отлаживать sub в foo/bar/test.pm. Как установить точку останова на этом суб?

Как я могу это сделать?

Спасибо.

+2

Я не удовлетворен ответом,. Что такое синтаксис 'b [ln]', необходимый для разрыва в определенной строке в определенном файле? – Adrian

ответ

22

Чтобы отладить скрипт perl, используйте переключатель -d для вызова отладчика.

perl -d test.pl 

В отладчике вы можете использовать b <line no>, чтобы установить контрольную точку в текущем файле. Иногда это хлопот, чтобы установить точку останова в файле, который не был загружен или еще что был загружен уже давно, так что вы можете также поместить строку

$DB::single = 1; 

в любом месте в любой программе Perl, и отладчик прерывается сразу же после выполнения этой строки. Это также хороший способ (единственный способ?) Установить точку останова в коде, которая будет запущена во время компиляции.

+3

Стоит отметить, что команда 'f' в отладчике переключится на просмотр имени файла, как в 'f /Path/To/Module.pm'; файл должен быть уже загружен. Затем вы можете установить точку останова не только в точке входа подпрограммы, но и в любой допустимой строке в этом файле. – amp108

+2

'$ DB :: single = 1;' линия работает для любого? Это не остановить контроль, я думаю, – Bathakarai

+0

@ Батхакарай работал для меня. –

9

Просто используйте полное имя переводника в качестве аргумента в b:

b foo::bar::test::subname 

Пример:

$ perl -d -e'use CGI; CGI->new' 
... 
main::(-e:1): use CGI; CGI->new 
    DB<1> b CGI::new 
    DB<2> r 
CGI::new(.../CGI.pm:337): 
337:  my($class,@initializer) = @_; 
    DB<2> q 
+0

Это фактический ответ на вопрос OP. (Я уже знал это и фактически искал информацию, указанную в других ответах.) –

Смежные вопросы