I'm tired of inserting
import pdb; pdb.set_trace()
lines into my Python programs and debugging through the console. How do I connect a remote debugger and insert breakpoints from a civilized user interface?
I'm tired of inserting
import pdb; pdb.set_trace()
lines into my Python programs and debugging through the console. How do I connect a remote debugger and insert breakpoints from a civilized user interface?
use Winpdb. It is a platform independent graphical GPL Python debugger with support for remote debugging over a network, multiple threads, namespace modification, embedded debugging, encrypted communication and is up to 20 times faster than pdb.
Features:
(source: winpdb.org)
GitHub - bluebird75/winpdb: Fork of the official winpdb with improvements
A little bit late, but here is a very lightweight remote debugging solution courtesy of
Michael DeHaan • Tips on Using Debuggers With Ansible:
pip install epdb
on the remote host.epdb
defaults to listening on any address (INADDR_ANY
), not 127.0.0.1.import pdb; pdb.set_trace()
in your program, use import epdb; epdb.serve()
.epdb.connect()
uses telnet.python -c 'import epdb; epdb.connect()'
.Adjust the security bits to suit your local network setup and security stance, of course.
module 'epdb' has no attribute 'serve'
–
Aquiculture pip install epdb
from a python 3.5.2 venv with pip 19.2.1 gets me epdb 0.15.1 from github.com/sassoftware/epdb, and the epdb.serve()
and epdb.connect()
methods still work as indicated in the answer above. –
Galyak Well, you can get something quite similar to that using a twisted manhole, which works like this:
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()
Then you just login to the program over ssh;
$ ssh admin@localhost -p 2222
admin@localhost's password:
Using foobar as the password.
When you login you'll get a normal python prompt where you can just poke at the data. It's not quite the same as getting a traceback sent over to a host.
Now, this might be tricky to integrate to a GUI program, in that case you might need to choose another reactor, for instance for gtk based programs used the gtk2reactor etc.
If you want the actual traceback sent over you need to create a socket channel for both stderr, stdin and stdout which goes over the network instead of printing to your local host. Shouldn't be too hard to accomplish by using twisted.
Two solutions from modern IDEs:
I find pudb useful at emergency
pip install pudb
Project Description https://pypi.org/project/pudb/
Tutorial: https://vimeo.com/5255125
None of the answers here handle the case where the binary was not prepared in advance. For that purpose, a while ago I hacked together pydbattach.
Some solutions:
© 2022 - 2025 — McMap. All rights reserved.