Точки останова в демоне python [дубликат]

Заменить xlim(0, 14000) на scale_x_continuous(breaks=seq(1, 15000, 1000), limits = c(0, 14000))

Код элемента:

library(ggplot2)
ggplot(df, aes(Age, RSL, shape = Type)) +
    geom_point() +
    geom_errorbarh(aes(xmin = x_min_error,
                       xmax = x_max_error,
                       height = 0)) +
    geom_errorbar(aes(ymin = y_min_error,
                      ymax = y_max_error,
                      width = 0)) +
    scale_shape_manual(values = c(1, 15, 5)) +
    scale_y_continuous(limits = c(0, 120)) +
    scale_x_continuous(breaks=seq(1, 15000, 1000), 
                       limits = c(0, 14000))
51
задан joeforker 12 February 2009 в 21:54
поделиться

4 ответа

использовать Winpdb . Это независимый от платформы графический отладчик GPL Python с поддержкой удаленной отладки по сети, несколько потоков, изменение пространства имен, встроенная отладка, зашифрованная связь и до 20 раз быстрее, чем pdb.

Особенности:

  • Лицензия GPL.
  • Совместимость с 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

57
ответ дан nosklo 24 August 2018 в 08:05
поделиться

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

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

10
ответ дан CitizenB 24 August 2018 в 08:05
поделиться
  • 1
    Это помогло мне отладить приложение python, запущенное внутри контейнера Docker. Установка была еще более сложной благодаря использованию Docker Compose и nginx + uwsgi для запуска приложения python, поэтому ни один из других решений не работал для меня. Это было сделано. – duality_ 20 September 2016 в 08:16
  • 2
    Это самый быстрый способ отладки приложений curses. Ура! – Qix 19 April 2017 в 19:18
  • 3
    Это все еще работает? Я получаю module 'epdb' has no attribute 'serve' – arjabbar 21 June 2018 в 21:31

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

  1. Межплатформенная дистанционная отладка PTVS
  2. Удаленная отладка PyCharm / PyDev
2
ответ дан denfromufa 24 August 2018 в 08:05
поделиться
  • 1
    Pycharm требует, чтобы это была профессиональная версия – gdbj 13 July 2017 в 14:10
  • 2
    У PTVS, похоже, много проблем, например, контейнеров. И CPython не поддерживается? – lucid_dreamer 24 September 2017 в 21:27

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

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: 

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

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

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

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

17
ответ дан Johan Dahlin 24 August 2018 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: