Функция удобства, определенная для отладки с 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 2

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.