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

StackOverflow https://stackoverflow.com/questions/543196

  •  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 или новее.

Screenshot
(источник: 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:

  1. pip install epdb на удаленном хосте.
  2. Убедитесь, что ваша настройка брандмауэра не разрешает нелокальные подключения к порту 8080 на удаленном хосте, поскольку epdb по умолчанию прослушивает любой адрес (INADDR_ANY), а не 127.0.0.1.
  3. Вместо использования import pdb; pdb.set_trace() в своей программе используйте import epdb; epdb.serve().
  4. Безопасно войдите на удаленный хост, поскольку epdb.connect() использует телнет.
  5. Подключитесь к программе с помощью python -c 'import epdb; epdb.connect()'.

Разумеется, отрегулируйте биты безопасности в соответствии с настройками вашей локальной сети и уровнем безопасности.

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

  1. Кроссплатформенная удаленная отладка PTVS

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top