2009-02-12 2 views

ответ

55

использование 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 или новее.

Screenshot http://winpdb.org/images/screenshot_winpdb_small.jpg

+0

sudo aptitude install winpdb –

16

Ну, вы можете получить нечто похожее на то, что использование витой лаз, который работает так:

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]'s password: 

Использование Foobar в качестве пароля.

Когда вы входите в систему, вы получите обычное приглашение на python, где вы можете просто высунуть данные. Это не совсем то же самое, что получить трассировку, отправленную на хост.

Теперь, это может быть сложно интегрировать в программу с графическим интерфейсом, в этом случае вам, возможно, придется выбрать другой реактор, например, для программ, основанных на GTK используется gtk2reactor и т.д.

Если вы хотите, чтобы фактические отслеживающий послал вам нужно создать канал сокетов для stderr, stdin и stdout, который проходит через сеть вместо печати на ваш локальный хост. Не должно быть слишком сложно выполнить, используя скрученные.

2

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

  1. PTVS кросс-платформенный удаленной отладки

  2. PyCharm/PyDev удаленной отладки

+0

Pycharm требует, чтобы это была профессиональная версия – gdbj

+0

У PTVS, похоже, много проблем, esp с контейнерами. И CPython не поддерживается? – user1712447

9

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

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

+1

Это помогло мне отладить приложение python, запущенное внутри контейнера Docker. Установка была еще более сложной благодаря использованию Docker Compose и nginx + uwsgi для запуска приложения python, поэтому ни один из других решений не работал для меня. Это было сделано. –

+0

Это самый гладкий способ отладки программ curses. Ура! – Qix

Смежные вопросы