Функция удобства, определенная для отладки с ipdb в Python
В верхней части моих скриптов Python я определил следующую удобную функцию для отладки с помощью ipdb:
def bp():
import ipdb
ipdb.set_trace()
Поэтому, когда я хочу отладить в определенной точке, я могу написать:
bp()
Вместо того, чтобы писать
import ipdb; ipdb.set_trace()
(я предпочитаю не импортировать ipdb без необходимости).
Проблема с этим подходом заключается в том, что при входе в pdb я приземляюсь внутри функции bp (), поэтому мне нужно нажать 'u', чтобы перейти к соответствующей части кода:
> /path/to/script.py(15)bp()
14 import ipdb
---> 15 ipdb.set_trace()
16
ipdb> u
Есть ли способ, которым я можно было бы применить аналогичный подход, но посадка непосредственно в соответствующую часть кода?
1 ответ:
Один из способов изменить активный кадр в точке останова, определенной вызовом ipdb.set_trace () выглядит следующим образом:
def bp(): import ipdb ipdb.set_trace(sys._getframe().f_back)
Тот же подход, по-видимому, не работает для pdb с простым переименованием, но, по-видимому, работает следующее:
def bp(): from pdb import Pdb Pdb().set_trace(sys._getframe().f_back)
Для обоих этих примеров вам также нужно
import sys
перед вызовомset_trace
.Я проверил это в python 3.5, но не в других версиях python.