Как выполнять многострочные операторы в собственном отладчике Python (PDB)

Итак, я запускаю Python script, в котором я вызываю отладчик Python, PDB, написав:

import ipdb; ipdb.set_trace()

(версия iPython PDB, хотя для этого я не думаю, что это имеет значение, я использую ее только для цветного вывода).

Теперь, когда я добираюсь до отладчика, я хочу выполнить многострочный оператор, такой как предложение if или цикл for, но как только я набираю

if condition:

и нажмите клавишу возврата, я получаю сообщение об ошибке *** SyntaxError: invalid syntax (<stdin>, line 1)

Как выполнить многострочные операторы в PDB? Если это невозможно, есть ли способ обойти это, выполняя условие if или цикл for?

Ответ 1

Вы можете сделать это, находясь в pdb, чтобы запустить временный интерактивный сеанс Python со всеми доступными локальными переменными:

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

Когда вы закончите, используйте Ctrl-D, чтобы вернуться в обычное приглашение pdb.

Просто не ударяйте Ctrl-C, который завершит весь сеанс pdb.

Ответ 2

Внутри интерпретатора или отладчика Python (2.7.1) (import pdb) вы можете выполнить многострочный оператор со следующим синтаксисом.

for i in range(5): print("Hello"); print("World"); print(i)

Примечание. Когда я нахожусь внутри интерпретатора, я должен дважды нажать клавишу возврата, прежде чем код будет выполнен. Внутри отладчика, однако, мне нужно только один раз нажать кнопку возврата.

Ответ 3

У PDB есть команда под названием interact. Его можно использовать для:

Запустите интерактивный интерпретатор (используя модуль code), глобальное пространство имен которого содержит все (глобальные и локальные) имена, найденные в текущем сфера.

Чтобы использовать его, просто введите interact в командной строке pdb. Среди прочего, это полезно для применения кода, охватывающего несколько строк, а также для предотвращения случайного запуска других команд pdb.

Ответ 4

Существует специальный случай, если вы хотите выполнить пару команд при достижении точки останова. Тогда есть команда отладчика commands. Он позволяет вводить несколько строк команд, а затем завершать всю последовательность с помощью ключевого слова end. Больше с (pdb) help commands.

Ответ 5

Я не знаю, можете ли вы это сделать, это будет отличная функция для ipdb. Разумеется, вы можете использовать понимание списков и выполнять простые многострочные выражения, например:

if y == 3: print y; print y; print y;

Вы также можете заранее написать некоторые функции, чтобы сделать все, что вам нужно, что обычно принимает несколько строк.