我厌倦了插入操作
import pdb; pdb.set_trace()
我将代码行添加到Python程序中,并通过控制台进行调试。如何从文明的用户界面连接远程调试器并插入断点?
我厌倦了插入操作
import pdb; pdb.set_trace()
我将代码行添加到Python程序中,并通过控制台进行调试。如何从文明的用户界面连接远程调试器并插入断点?
使用Winpdb,它是一个跨平台的图形化GPL Python调试器,支持网络远程调试、多线程、命名空间修改、嵌入式调试、加密通信,并且比pdb快20倍。
特点:
(来源:winpdb.org)
有一种非常轻量级的远程调试解决方案,可以安装 http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible 提供的 epdb 进行。
pip install epdb
。epdb
默认监听任何地址 (INADDR_ANY
),而不是 127.0.0.1。import epdb; epdb.serve()
替代使用 import pdb; pdb.set_trace()
。epdb.connect()
使用 telnet。python -c 'import epdb; epdb.connect()'
连接到程序。当然,根据您的本地网络设置和安全策略进行适当的安全调整。
pip install epdb
可以从https://github.com/sassoftware/epdb获取版本为0.15.1的epdb,并且 epdb.serve()
和 epdb.connect()
方法仍然如上面的答案所示有效。 - CitizenB好的,你可以使用Twisted Manhole获得类似的东西,其工作原理如下:
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程序可能有些棘手,在这种情况下,您可能需要选择另一个反应器,例如用于gtk基于程序的gtk2reactor等。
如果您希望实际的回溯信息被发送,您需要创建一个套接字通道,用于在网络上发送stderr、stdin和stdout,而不是打印到本地主机。通过使用Twisted,这应该不难完成。
pip install pudb
项目描述 https://pypi.org/project/pudb/
Tutorial: https://vimeo.com/5255125