Python HTTP отладчик - PullRequest
       1

Python HTTP отладчик

0 голосов
/ 24 мая 2018

Я хотел бы установить некоторую команду отладки (например, import ipdb; ipdb.set_trace()), которая запускала бы отладчик в jupyter (мне пришлось бы запускать HTTP-сервер).Кто-нибудь знает что-то подобное?

Контекст: у меня есть долго выполняющиеся задачи, которые обрабатываются планировщиком (не в интерактивном режиме).Я хотел бы иметь возможность отладить такую ​​задачу при ее запуске таким же образом.

1 Ответ

0 голосов
/ 01 июня 2018

Мне нужно запустить код в "отделенном" (не интерактивном).И когда обнаруживается какая-либо ошибка, я хотел бы запустить отладчик.Вот почему я думал об удаленном отладчике / ноутбуке Jupyter или о чем угодно.Итак, по умолчанию сеанс отладки отсутствует, так что я думаю, что удаленный отладчик PyCharm - это не тот случай.

Вопреки тому, что может показаться здесь, вам не нужно запускать кодв «сеансе отладки» для использования удаленной отладки.

Попробуйте выполнить следующее:

  • Установите pydevd в среде Python для своего «отдельного» кода:

    pip install pydevd
    
  • В тех местах в этом коде, где вы в противном случае использовали бы pdb.set_trace, пишите

    import pydevd; pydevd.settrace('your-debugger-hostname-or-ip')
    

Теперь всякий раз, когда ваш коднажимает на инструкцию pydevd.settrace, она пытается подключиться к вашему серверу отладчика.

Затем вы можете запустить сервер отладчика из Eclipse PyDev или Pycharm и подключить к нему «отслеживаемый» процесс, готовый к отладке.,Подробнее см. здесь .

Разумеется, вам решать, что делать в случае тайм-аута соединения - вы можете либо заставить свой процесс ждать отладчик вечнов петле, или сдаться в какой-то момент.Вот пример, который, кажется, работает для меня (запустил службу на удаленной машине с Linux, подключил к ней через SSH с удаленной переадресацией портов, запустил локальный сервер отладки через Eclipse PyDev под Windows)

import pydevd
import socket
from socket import error

def wait_for_debugger(ex, retries=10):
    print("Bam. Connecting to debugger now...")
    while True:
        try:
            pydevd.settrace()
            break
        except SystemExit:
            # pydevd raises a SystemExit on connection failure somewhy
            retries -= 1
            if not retries: raise ex
            print(".. waiting ..")

def main():
    print("Hello")
    world = 1
    try:
        raise Exception
    except Exception as ex:
        wait_for_debugger(ex)

main()

Похоже, вам следует запустить локальный сервер отладки перед включением переадресации портов.В противном случае settrace зависает бесконечно, очевидно, полагая, что он «подключен», а на самом деле это не так.

Похоже, существует небольшой проект с именем rpcpdb с аналогичной целью, однако яне смог заставить его работать прямо из коробки, поэтому не могу много комментировать (я уверен, что пошаговое выполнение кода в IDE в любом случае намного удобнее).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...