Присоединение Python-отладчика - PullRequest
0 голосов
/ 15 января 2019

Я бы хотел присоединить отладчик Python к запущенному процессу. После этого комментария я попытался pdb-clone, но запутался. Вот скрипт, к которому я прилагаю:

import os
import time
from pdb_clone import pdbhandler
pdbhandler.register()

def loop(my_pid):
    print("Entering loop")
    while True:
        x = 'frog'
        time.sleep(0.5)
    print("Out of Loop")

if __name__ == '__main__':
    my_pid = os.getpid()
    print("pid = ", my_pid)
    loop(my_pid)

Если я запускаю python3 target_code_1.py в одном терминале и вижу PID = 95439, то во втором терминале попробуйте

sudo pdb-attach --kill --pid 95439

Я получаю сообщение об ошибке (которое я включаю ниже).

Однако предположим, что я одновременно запускаю python3 target_code_1.py в третьем терминале. Теперь я могу запустить sudo pdb-attach --kill --pid 95439 без ошибок, но когда я печатаю my_pid, значение равно 95440. С другой стороны, если я запускаю sudo pdb-attach --kill --pid 95440 и печатаю my_pid, значение равно 95439. (Другими словами, похоже, что pdb-attach поменялся местами, к какому потоку он присоединяется. Что происходит?

Для записи первоначальное сообщение об ошибке выглядит следующим образом:

sudo pdb-attach --kill --pid 95440
Traceback (most recent call last):
  File "/usr/local/bin/pdb-attach", line 4, in <module>
    attach.main()
  File "/usr/local/lib/python3.7/site-packages/pdb_clone/attach.py", line 646, in main
    attach(address)
  File "/usr/local/lib/python3.7/site-packages/pdb_clone/attach.py", line 596, in attach
    for count in asock.connect_retry(address, verbose):
  File "/usr/local/lib/python3.7/site-packages/pdb_clone/attach.py", line 115, in connect_retry
    self.connect(address)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncore.py", line 342, in connect
    raise OSError(err, errorcode[err])
OSError: [Errno 22] EINVAL

FWIW, я работаю на macOS Mojave 10.14.2, Python 3.7.0, Clang 9.1.0.

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

...