Я устал вставлять
import pdb; pdb.set_trace()
в мои программы Python и отладки через консоль. Как подключить удаленный отладчик и вставить точки останова из цивилизованного пользовательского интерфейса?
Я устал вставлять
import pdb; pdb.set_trace()
в мои программы Python и отладки через консоль. Как подключить удаленный отладчик и вставить точки останова из цивилизованного пользовательского интерфейса?
используйте Winpdb. Это независимый от независимый от платформы графический отладчик GPL Python с поддержкой удаленной отладки по сети, несколько потоков, изменение пространства имен, встроенная отладка, зашифрованная связь и до 20 раз быстрее, чем pdb.
Особенности:
Снимок экрана http://winpdb.org/images/screenshot_winpdb_small.jpg
Хорошо, вы можете получить что-то очень похожее на то, что с помощью скрученного люка, который работает следующим образом:
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 [email protected] -p 2222
[email protected] password:
Использование foobar в качестве пароля.
Когда вы входите в систему, вы получите стандартную подсказку python, где вы можете просто высунуть данные. Это не совсем так же, как получение трассировки, отправленной на хост.
Теперь это может быть сложно интегрировать в программу GUI, в этом случае вам может потребоваться выбрать другой реактор, например, для программ на основе gtk, используемых gtk2reactor и т.д.
Если вы хотите, чтобы фактическая трассировка была отправлена, вам нужно создать канал сокета для stderr, stdin и stdout, который проходит через сеть вместо печати на ваш локальный хост. Не должно быть слишком сложно выполнить, используя скрученные.
Немного поздно, но вот очень легкое решение для удаленной отладки http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible:
pip install epdb
на удаленном хосте.epdb
по умолчанию используется для прослушивания по любому адресу (INADDR_ANY
), а не 127.0.0.1.import pdb; pdb.set_trace()
в вашей программе используйте import epdb; epdb.serve()
.epdb.connect()
использует telnet.python -c 'import epdb; epdb.connect()'
.Настройте биты безопасности в соответствии с настройками вашей локальной сети и безопасностью.
Два решения от современных IDE:
Межплатформенная дистанционная отладка PTVS
Удаленная отладка PyCharm/PyDev