Понимание вывода pdb после pdb.set_trace()

Попытка отладить мой roguelike на основе python с помощью pdb. Я пытаюсь выяснить, является ли функция handle_keys(), возвращающая 0, как я спрашиваю. У меня есть другая функция, которая ведет себя не так, как ожидалось, и поэтому я пытаюсь выяснить, где происходит проблема. Что должно произойти: handle_keys() возвращает 0, затем frag_grenade () что-то делает.

Я вставил трассировку для pdb, но я не уверен, покажет ли это мне, если handle_keys() возвращает 0 или нет:

elif key.vk == libtcod.KEY_BACKSPACE:
        game_state = 'playing'
        pdb.set_trace()
        return 0

Когда я нажимаю клавишу Backspace в игре, я получаю следующий вывод из pdb:

-> вернуть 0

Я не уверен, показывает ли это возвращаемое значение или просто показывает следующую строку кода....

Большое спасибо!

1 ответ

26,2. pdb - отладчик Python - документация по Python 2.7.15:

Типичное использование для взлома отладчика из запущенной программы - это вставить

import pdb; pdb.set_trace()

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

Стрелка указывает на текущую строку, которая должна быть выполнена.

Возвращаемое значение печатается совершенно иначе:

In [11]: def answer():
    ...:     return 42

In [13]: pdb.runeval("answer()")
> <string>(1)<module>()->None
(Pdb) s
--Call--
> <ipython-input-11-22e067ec9c24>(1)answer()
-> def answer():
(Pdb) n
> <ipython-input-11-22e067ec9c24>(2)answer()
-> return 42
(Pdb)
--Return--
> <ipython-input-11-22e067ec9c24>(2)answer()->42
-> return 42
(Pdb)

Как видите, возвращаемая строка печатается дважды - сначала перед выполнением, а затем при возврате функции. Во второй раз это сопровождается --Return-- и возвращаемое значение в строке местоположения.

Другие вопросы по тегам