我厌倦了插入
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作为密码.
当你登录时,你会得到一个正常的python提示,你可以在那里捅数据.这与将回溯发送到主机的方式完全不同.
现在,集成到GUI程序可能很棘手,在这种情况下,您可能需要选择另一个反应器,例如使用gtk2reactor等基于gtk的程序.
如果您希望通过您发送的实际回溯,则需要为stderr,stdin和stdout创建一个套接字通道,该通道通过网络而不是打印到本地主机.使用扭曲不应该太难实现.
有点晚了,但这是一个非常轻量级的远程调试解决方案,由http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible提供:
pip install epdb
在远程主机上.
确保您的防火墙设置不允许非本地连接到远程主机上的端口8080,因为epdb
默认监听任何地址(INADDR_ANY
),而不是127.0.0.1.
不要import pdb; pdb.set_trace()
在你的程序中使用,而是使用import epdb; epdb.serve()
.
安全登录远程主机,因为epdb.connect()
使用telnet.
使用附加到程序python -c 'import epdb; epdb.connect()'
.
当然,调整安全位以适合您的本地网络设置和安全性.