Как подключить удаленный отладчик к процессу Python?
-
23-08-2019 - |
Вопрос
я устал вставлять
import pdb; pdb.set_trace()
строки в мои программы Python и отладку через консоль.Как подключить удаленный отладчик и вставить точки останова из цивилизованного пользовательского интерфейса?
Решение
использовать Винпдб.Это независимая платформа графический отладчик Python под лицензией GPL с поддержкой удаленной отладки по сети, нескольких потоков, модификации пространства имен, встроенной отладки, зашифрованной связи и работает до 20 раз быстрее, чем pdb.
Функции:
- Лицензия GPL.Winpdb — бесплатное программное обеспечение.
- Совместимость с CPython 2.3–2.6 и Python 3000.
- Совместимость с wxPython версий 2.6–2.8.
- Независим от платформы и протестирован на Ubuntu Gutsy и Windows XP.
- Пользовательские интерфейсы:rpdb2 работает на консоли, а для winpdb требуется wxPython 2.6 или новее.
(источник: winpdb.org)
Другие советы
Ну, вы можете получить что -то очень похожее на это, используя скрученную люк, которая работает так:
from twisted.internet import reactor
from twisted.cred import portal, checkers
from twisted.conch import manhole, manhole_ssh
def getManholeFactory(namespace):
realm = manhole_ssh.TerminalRealm()
def getManhole(_):
return manhole.Manhole(namespace)
realm.chainedProtocolFactory.protocolFactory = getManhole
p = portal.Portal(realm)
p.registerChecker(
checkers.InMemoryUsernamePassword DatabaseDontUse(admin='foobar'))
f = manhole_ssh.ConchFactory(p)
return f
reactor.listenTCP(2222, getManholeFactory(globals()))
reactor.run()
Затем вы просто входите в программу через ssh;
$ ssh admin@localhost -p 2222
admin@localhost's password:
С использованием Фубар в качестве пароля.
Когда вы войдете в систему, вы получите обычное приглашение Python, где вы можете просто просмотреть данные.Это не совсем то же самое, что отправка обратной трассировки на хост.
Теперь это может быть сложно интегрировать в программу с графическим интерфейсом, в этом случае вам может потребоваться выбрать другой реактор, например, для программ на основе gtk используется gtk2reactor и т. д.
Если вы хотите, чтобы фактическая обратная трассировка была отправлена, вам необходимо создать канал сокета для stderr, stdin и stdout, который будет передаваться по сети, а не печатать на локальном хосте.Это не должно быть слишком сложно сделать, используя витой.
Немного поздно, но вот очень легкое решение для удаленной отладки, любезно предоставленное http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible:
pip install epdb
на удаленном хосте.- Убедитесь, что ваша настройка брандмауэра не разрешает нелокальные подключения к порту 8080 на удаленном хосте, поскольку
epdb
по умолчанию прослушивает любой адрес (INADDR_ANY
), а не 127.0.0.1. - Вместо использования
import pdb; pdb.set_trace()
в своей программе используйтеimport epdb; epdb.serve()
. - Безопасно войдите на удаленный хост, поскольку
epdb.connect()
использует телнет. - Подключитесь к программе с помощью
python -c 'import epdb; epdb.connect()'
.
Разумеется, отрегулируйте биты безопасности в соответствии с настройками вашей локальной сети и уровнем безопасности.
Два решения из современных IDE:
Кроссплатформенная удаленная отладка PTVS
Удаленная отладка PyCharm/PyDev