Какой самый подходящий способ разбить файл: строку в отладчике Perl? - PullRequest
0 голосов
/ 15 июля 2011

Я пробовал несколько способов, ни один не работает:

b file:line
f file
b line
b load <file>

что здесь не так?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Я не до конца понимаю ваш вопрос, но все опции для 'b' в отладчике perl можно просмотреть с помощью '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++) {

Вы могли бы также

  • добавить "$ DB :: single = 1;" в исходном коде (не забудьте удалить его, когда закончите!)

и просто "c", чтобы продолжить через отладчик, пока вы не добавите эту строку в свой код. Необходимость добавлять и удалять специальные маркеры в вашем источнике противоречит общему принципу отладки, но иногда это полезный способ легко остановиться в труднодоступном или медленном темпе, чтобы пройти через отладчик.

1 голос
/ 15 июля 2011

Полагаю, вы запустили Perl-скрипт в отладчике, который использует некоторые модули с некоторыми пакетами.

  1. Вы можете использовать команду отладчика S для просмотра списка доступных подпрограмм.,Для фильтрации списка можно использовать необязательный шаблон регулярных выражений: S [[!]pat] List subroutine names [not] matching pattern

  2. Чтобы установить точку останова для функции в некотором пакете, вы можете использовать эту форму команд точки останова b package::function.Наверное, это могло бы быть задокументировано лучше.

У меня была такая же проблема некоторое время назад, и я сейчас так ее использую.

Обновление: я только что проверилпоследовательность

f file
b line

Это работает для меня, когда модуль был загружен до с use package или require package.Путь для file указывается относительно текущего каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...