Comments (12)
I cannot produce the problem on Ubuntu but I suspect it's a lingering socket issue - this happens only after a restart right?
from python-remote-pdb.
I do set SO_REUSEADDR in https://github.com/ionelmc/python-remote-pdb/blob/master/src/remote_pdb.py#L69 - perhaps you could patch it up locally to additionally set SO_REUSEPORT and report results? I don't have an OSX system to play with.
from python-remote-pdb.
Thanks for the quick responses. The only pure Linux system I've got handy is a Raspberry Pi running Raspbian Jessie. I'll try it out on that to see if the problem occurs there and let you know the result. Then I'll try patching in SO_REUSEPORT and running it on OS X. More later ...
from python-remote-pdb.
I've confirmed the problem is not occurring in Linux.
from python-remote-pdb.
I added
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, True)
at line 70.
No effect on the problem (on OS X). Just to clarify, the connection has always succeeded. I see
CRITICAL:root:RemotePdb accepted connection from ('127.0.0.1', 60462).
RemotePdb accepted connection from ('127.0.0.1', 60462).
with or without SO_REUSEPORT. The problem is that I don't get a Pdb prompt and nothing I type produces a response.
from python-remote-pdb.
I've been able to confirm the following on OS X
- When the problem occurs, the code never makes it past the the call to Pdb__iniit__ .
- When I run my test file bare at the command line (python mp.py) the problem doesn't occur and the code makes it past Pdb.init and all the way to the end of RemotePdb.init
from python-remote-pdb.
One way to figure this one out: install hunter and just add import hunter; hunter.trace()
somewhere convenient - perhaps in the child function?
from python-remote-pdb.
I'll definitely give that a try! I was looking earlier today for a tracing program to help a fellow engineer explore some unfamiliar Python code. This looks perfect. I think I'll need to trace into Pdb itself since that's where things seem to be going wrong.
from python-remote-pdb.
Pdb seems to be going down the rabbit hole trying to import readline.
[...]llis/anaconda3/lib/python3.5/pdb.py:139 call def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
[...]llis/anaconda3/lib/python3.5/pdb.py:141 line bdb.Bdb.__init__(self, skip=skip)
[...]llis/anaconda3/lib/python3.5/pdb.py:142 line cmd.Cmd.__init__(self, completekey, stdin, stdout)
[...]llis/anaconda3/lib/python3.5/pdb.py:143 line if stdout:
[...]llis/anaconda3/lib/python3.5/pdb.py:144 line self.use_rawinput = 0
[...]llis/anaconda3/lib/python3.5/pdb.py:145 line self.prompt = '(Pdb) '
[...]llis/anaconda3/lib/python3.5/pdb.py:146 line self.aliases = {}
[...]llis/anaconda3/lib/python3.5/pdb.py:147 line self.displaying = {}
[...]llis/anaconda3/lib/python3.5/pdb.py:148 line self.mainpyfile = ''
[...]llis/anaconda3/lib/python3.5/pdb.py:149 line self._wait_for_mainpyfile = False
[...]llis/anaconda3/lib/python3.5/pdb.py:150 line self.tb_lineno = {}
[...]llis/anaconda3/lib/python3.5/pdb.py:152 line try:
[...]llis/anaconda3/lib/python3.5/pdb.py:153 line import readline
More later. Have to eat dinner now. Hunter seems downright awesome!
from python-remote-pdb.
It's hanging during the import readline. I tried setting hunter to trace readline but that's a .so, so of course no luck ...
from python-remote-pdb.
Solved! It's an old OS X python issue that has either crept back in or was never fixed in Pdb. The fix is to set up to ignore SIGTTOU before importing readline. See http://bugs.python.org/issue14892 for details.
I cured the problem by patching my local copy of pdb.Pdb as shown below.
class Pdb(bdb.Bdb, cmd.Cmd):
_previous_sigint_handler = None
def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
nosigint=False):
bdb.Bdb.__init__(self, skip=skip)
cmd.Cmd.__init__(self, completekey, stdin, stdout)
if stdout:
self.use_rawinput = 0
self.prompt = '(Pdb) '
self.aliases = {}
self.displaying = {}
self.mainpyfile = ''
self._wait_for_mainpyfile = False
self.tb_lineno = {}
# Try to load readline if it exists
try:
############ FIX OSX BUG ######################################
import sys
if sys.platform == 'darwin':
import signal
signal.signal(signal.SIGTTOU, signal.SIG_IGN)
############ END FIX ##########################################
import readline
# remove some common file name delimiters
readline.set_completer_delims(' \t\n`@#$%^&*()=+[{]}\\|;:\'",<>?')
except ImportError:
pass
Thanks much for your generous help and for hunter.
Cheers,
Mike
from python-remote-pdb.
Nice find! I'll add this to the readme at the very least.
from python-remote-pdb.
Related Issues (20)
- python -m remote_pdb equivalent of python -m pdb
- remote_pdb equivalents for pdb.run, pdb.runeval, pdb.runcall, pdb.post_mortem and pdb.pm()
- autocompletion and [TAB] action does not work on linux HOT 6
- Question: PyCharm Debugging with Remote-Pdb? HOT 1
- Silent / quiet mode HOT 2
- Source code gets chopped off in a remote session HOT 2
- Documentation: socat readline does not work
- pdbpp HOT 2
- Jython Support HOT 2
- Connection in Docker drops immediately HOT 2
- set_trace call vs RemotePdb instance HOT 2
- Can't send Up arrow or navigate history? HOT 4
- Is it possible for remote-pdb session to be started (and connected to) from within an AWS Lambda? HOT 1
- Add `post_mortem()` HOT 1
- Interactive mode
- Pdb doesn't stop on set_trace command. HOT 1
- Check compatibility with celery HOT 1
- Always show session open message HOT 1
- How I can send SIGINT over a telnet session? HOT 9
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from python-remote-pdb.