Ограничение объема информации распечатано отладчиком Perl

Один из моих главных объектов неприязни с отладкой кода Perl (в отладчике командной строки, perl -d) то, что по ошибке печать (через x команда) содержание огромного datastructure, как гарантируют, замерзнет Ваш терминал для навсегда с половиной, в то время как 100 с страниц данных печатаются. Epecially, если это происходит через достаточно медленную сеть.

По сути, я хотел бы смочь ограничить объем данных это x печать.

Я вижу два подхода - я был бы готов попробовать также, если кто-то знает, как сделать.

  1. Ограничьте объем данных любая единственная команда в печати отладчика.

  2. Еще лучше так или иначе замените встроенное x команда с пользовательским методом Perl (который вычислил бы "размер" структуры данных и отказался бы печатать ее содержание без подтверждения).

Я конкретно спрашиваю, "как заменить x с пользовательским кодом" - создание Достаточно хорошего "является структурой данных, слишком большой" метод Perl - что-то, что я могу, вероятно, сделать самостоятельно без слишком большого усилия, хотя я вижу, что достаточно ловушек препятствует тому, чтобы "идеальный" был довольно расстраивающим усилием. Heck, просто делая Данные:: самосвал-> Дамп и взятие длины строки мог бы добиться цели :)

Обратите внимание на то, что я отлично знаю, как вручную избежать проблемы путем рекурсивного исследования слоев datastructure (например, распечатать касательно, распечатайте количество ключей/элементов массива, и т.д....)... самое главное, я хочу смочь постараться не неосмотрительно вводить x $huge_pile_of_data не думая - или натыкаясь на ошибку, заполняющую, сказал, что огромная груда данных в то, что должно быть скаляром.

5
задан DVK 2 March 2010 в 15:43
поделиться

2 ответа

Команда | в отладчике направляет вывод другой команды на ваш пейджер, например.

  DB<1> |x %huge_datastructure
8
ответ дан 18 December 2019 в 07:08
поделиться

Команда x принимает необязательный аргумент для максимальной глубины отображения. Это не совсем то же самое, что ограничить объем данных N страницами, но это определенно полезно для предотвращения перегрузки.

  DB<1> %h = (a => { b => { c => 1 } } )

  DB<2> x %h
0  'a'
1  HASH(0x1d5ff44)
   'b' => HASH(0x1d61424)
      'c' => 1

  DB<3> x 2 %h
0  'a'
1  HASH(0x1d5ff44)
   'b' => HASH(0x1d61424)

Вы можете указать глубину по умолчанию для печати с помощью команды o, например

DB<1>o dumpDepth=1

Добавьте это в файл .perldb, чтобы применить это ко всем сессиям отладчика.

В противном случае, похоже, что команда x вызывает DB::dumpit(), которая является просто оберткой для dumpval.pl (или, более конкретно, main::dumpValue() sub, который она определяет). Вы можете изменить/заменить этот скрипт по своему усмотрению. Однако я не уверен, как вы сделаете его интерактивным.

14
ответ дан 18 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: