[英]How do I attach a remote debugger to a Python process?
我厭倦了插入
import pdb; pdb.set_trace()
進入我的 Python 程序並通過控制台調試。 如何連接遠程調試器並從文明的用戶界面插入斷點?
使用Winpdb 。 它是一個獨立於平台的圖形 GPL Python 調試器,支持通過網絡進行遠程調試、多線程、命名空間修改、嵌入式調試、加密通信,並且比 pdb 快 20 倍。
特征:
(來源: 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作為密碼。
當你登錄時,你會得到一個正常的 python 提示,你可以在其中戳數據。 這與將回溯發送到主機並不完全相同。
現在,這可能很難集成到 GUI 程序中,在這種情況下,您可能需要選擇另一個反應器,例如對於使用 gtk2reactor 等的基於 gtk 的程序。
如果您想要發送實際的回溯,您需要為 stderr、stdin 和 stdout 創建一個套接字通道,該通道通過網絡而不是打印到本地主機。 使用twisted應該不會太難完成。
有點晚了,但這是一個非常輕量級的遠程調試解決方案,由http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible提供:
pip install epdb
。epdb
默認偵聽任何地址 ( INADDR_ANY
),而不是 127.0.0.1。import pdb; pdb.set_trace()
import pdb; pdb.set_trace()
在你的程序中,使用import epdb; epdb.serve()
import epdb; epdb.serve()
。epdb.connect()
使用 telnet。python -c 'import epdb; epdb.connect()'
python -c 'import epdb; epdb.connect()'
。當然,調整安全位以適應您的本地網絡設置和安全立場。
我發現 pudb 在緊急情況下很有用
pip install pudb
項目描述https://pypi.org/project/pudb/
教程: https ://vimeo.com/5255125
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.