Подтвердить что ты не робот

Как подключить удаленный отладчик к процессу Python?

Я устал вставлять

import pdb; pdb.set_trace()

в мои программы Python и отладки через консоль. Как подключить удаленный отладчик и вставить точки останова из цивилизованного пользовательского интерфейса?

4b9b3361

Ответ 1

используйте Winpdb. Это независимый от независимый от платформы графический отладчик GPL Python с поддержкой удаленной отладки по сети, несколько потоков, изменение пространства имен, встроенная отладка, зашифрованная связь и до 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 или новее.

Снимок экрана http://winpdb.org/images/screenshot_winpdb_small.jpg

Ответ 2

Хорошо, вы можете получить что-то очень похожее на то, что с помощью скрученного люка, который работает следующим образом:

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, который проходит через сеть вместо печати на ваш локальный хост. Не должно быть слишком сложно выполнить, используя скрученные.

Ответ 3

Немного поздно, но вот очень легкое решение для удаленной отладки 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() использует telnet.
  • Прикрепите к программе с помощью python -c 'import epdb; epdb.connect()'.

Настройте биты безопасности в соответствии с настройками вашей локальной сети и безопасностью.

Ответ 4

Два решения от современных IDE:

  • Межплатформенная дистанционная отладка PTVS

  • Удаленная отладка PyCharm/PyDev