Может ли PDB использовать аннотации / подсказки типа Python3.5 + для автозаполнения? - PullRequest
1 голос
/ 29 апреля 2019

Я довольно широко использую PDB для проекта на python3, но замечаю, что автозаполнение часто не работает так, как я ожидаю при отладке внутри функций при запуске PDB через IPython .

Большую часть времени, когда я набираю некоторую переменную, за которой следует точка, я ожидаю, что pdb предложит варианты автозаполнения для методов, которые я могу вызвать. По умолчанию кажется, что PDB не использует какие-либо подсказки типа, которые я вставил, чтобы предложить автозаполнение.

Я предполагаю, что это потому, что аннотации типов по существу стираются во время выполнения, поэтому PDB не имеет доступа к этой информации.

Мой вопрос: Есть ли какой-нибудь встроенный способ, которым я могу заставить PDB использовать аннотации типа python3 в качестве средства для автозаполнения предложений?

Например, для некоторого класса:

class MyClass:
    def __init__(self):
        ...

    def get_property():
        ...

и некоторые функции:

# test.py 

def debug_this(test: MyClass):
    # set breakpoint here

Если я установлю точку останова внутри debug_this и попытаюсь завершить табуляцию test внутри PDB, я ожидаю что-то вроде следующего:

$ ipython -m pdb test.py
(Pdb)> break 4
(Pdb)> continue
(Pdb)> test. # then press tab
test.get_property(

Но вместо этого я не нашел совпадений.

(Я считаю, что можно написать пользовательскую завершенную функцию для моего .pdbrc, но я просто хочу знать, есть ли способ избежать этой головной боли.)

Edit: я должен отметить, что функция автозаполнения работает для глобальных переменных, которые не объявлены в области действия функции, потому что pdb является определенным типом этих переменных. Я просто хочу посмотреть, смогу ли я заставить PDB предположить, что моя аннотация типа правильная, и предложить соответствующие автозаполнения, используя это предположение.

...