如何将远程debugging器附加到Python进程?

我厌倦了插入

import pdb; pdb.set_trace() 

换行到我的Python程序并通过控制台进行debugging。 如何连接远程debugging器并从文明用户界面插入断点?

使用Winpdb 。 它是一个独立平台的graphicsGPL Pythondebugging器,支持通过networking远程debugging,multithreading,命名空间修改,embedded式debugging,encryption通信,速度比pdb快20倍。

特征:

  • GPL许可证。 Winpdb是自由软件。
  • 兼容CPython 2.3到2.6和Python 3000
  • 兼容wxPython 2.6到2.8
  • 独立于平台,并在Ubuntu Gutsy和Windows XP上testing。
  • 用户界面:rpdb2是基于控制台的,而winpdb则需要wxPython 2.6或更高版本。

截图http://winpdb.orghttp://img.dovov.comscreenshot_winpdb_small.jpg

那么,你可以得到一个非常相似的东西,就像使用扭曲的人孔,这是这样的:

 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() 

然后你只需通过sshlogin程序;

 $ ssh admin@localhost -p 2222 admin@localhost's password: 

使用foob​​ar作为密码。

当你login时,你会得到一个正常的python提示符,你可以在这里捅数据。 这跟追溯发送给主机不太一样。

现在,将其集成到GUI程序中可能会非常棘手,在这种情况下,您可能需要select另一个反应器,例如用于gtk2reactor等的基于gtk的程序。

如果您希望发送的实际回溯,则需要为stderr,stdin和stdout创build套接字通道,而不是通过networking打印到本地主机。 通过使用扭曲不应该太难。

有点晚,但这是一个非常轻量级的远程debugging解决scheme礼貌http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible

  1. pip install epdb在远程主机上pip install epdb
  2. 确保防火墙设置不允许非本地连接到远程主机上的端口8080,因为epdb默认侦听任何地址( INADDR_ANY )而不是127.0.0.1。
  3. 而不是使用import pdb; pdb.set_trace() 在你的程序中使用import pdb; pdb.set_trace() ,使用import epdb; epdb.serve() import epdb; epdb.serve()
  4. 安全地login到远程主机,因为epdb.connect()使用telnet。
  5. 附加到程序使用python -c 'import epdb; epdb.connect()' python -c 'import epdb; epdb.connect()'

当然,调整安全位以适应您的本地networking设置和安全性。

现代IDE的两个解决scheme:

  1. PTVS跨平台远程debugging

  2. PyCharm / PyDev远程debugging