IT이야기

원격 디버거를 Python 프로세스에 어떻게 연결합니까?

cyworld 2021. 9. 13. 21:49
반응형

원격 디버거를 Python 프로세스에 어떻게 연결합니까?


넣기 귀찮아

import pdb; pdb.set_trace()

내 Python 프로그램에 줄을 추가하고 콘솔을 통해 디버깅합니다. 원격 디버거를 연결하고 문명화된 사용자 인터페이스에서 중단점을 삽입하려면 어떻게 해야 합니까?


Winpdb를 사용 하십시오 . 네트워크를 통한 원격 디버깅, 다중 스레드, 네임스페이스 수정, 임베디드 디버깅, 암호화된 통신을 지원 하는 플랫폼 독립적인 그래픽 GPL Python 디버거이며 pdb보다 최대 20배 빠릅니다.

특징:

  • GPL 라이선스. Winpdb는 자유 소프트웨어입니다.
  • CPython 2.3 ~ 2.6 및 Python 3000과 호환
  • wxPython 2.6 ~ 2.8과 호환
  • 플랫폼 독립적이며 Ubuntu Gutsy 및 Windows XP에서 테스트되었습니다.
  • 사용자 인터페이스: rpdb2는 콘솔 기반이지만 winpdb에는 wxPython 2.6 이상이 필요합니다.

스크린샷
(출처: 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: 

foobar 를 비밀번호로 사용 합니다.

로그인하면 데이터를 찔러볼 수 있는 일반적인 파이썬 프롬프트가 표시됩니다. 호스트로 트레이스백을 보내는 것과는 다릅니다.

이제 GUI 프로그램에 통합하기가 까다로울 수 있습니다. 이 경우 다른 리액터를 선택해야 할 수 있습니다(예: gtk 기반 프로그램에서 gtk2reactor 등을 사용하는 경우).

실제 역추적을 보내려면 로컬 호스트로 인쇄하는 대신 네트워크를 통해 이동하는 stderr, stdin 및 stdout 모두에 대한 소켓 채널을 만들어야 합니다. 트위스트를 사용하여 달성하기에는 너무 어렵지 않아야 합니다.


조금 늦었지만 여기에 http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible 의 매우 가벼운 원격 디버깅 솔루션이 있습니다 .

  1. pip install epdb 원격 호스트에서.
  2. epdb기본적으로 INADDR_ANY127.0.0.1이 아닌 모든 주소( )에서 수신 대기 하도록 설정되어 있으므로 방화벽 설정이 원격 호스트의 포트 8080에 대한 비로컬 연결을 허용하지 않는지 확인하십시오 .
  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 원격 디버깅

ReferenceURL : https://stackoverflow.com/questions/543196/how-do-i-attach-a-remote-debugger-to-a-python-process

반응형