diff options
author | Kurt B. Kaiser <kbk@shore.net> | 2003-05-10 00:09:52 (GMT) |
---|---|---|
committer | Kurt B. Kaiser <kbk@shore.net> | 2003-05-10 00:09:52 (GMT) |
commit | 57bfe5dc5a4873026679fb911939beb69e35a9e8 (patch) | |
tree | 80f4879e6a224a7f8ae5994fd2a08694faa63b0a | |
parent | 9f545c489ad7831305e9f477fe48e59ae60a5c83 (diff) | |
download | cpython-57bfe5dc5a4873026679fb911939beb69e35a9e8.zip cpython-57bfe5dc5a4873026679fb911939beb69e35a9e8.tar.gz cpython-57bfe5dc5a4873026679fb911939beb69e35a9e8.tar.bz2 |
1. Update debugger to not trace RPC code even when calling Queue and
threading modules. Can debug user code which imports these modules,
though.
2. Re-enable debugger in PyShell.
3. Remove old code implementing previous approaches to this issue.
M Debugger.py
M PyShell.py
M rpc.py
-rw-r--r-- | Lib/idlelib/Debugger.py | 46 | ||||
-rw-r--r-- | Lib/idlelib/PyShell.py | 2 | ||||
-rw-r--r-- | Lib/idlelib/rpc.py | 2 |
3 files changed, 17 insertions, 33 deletions
diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py index 5f85182..75e6cc8 100644 --- a/Lib/idlelib/Debugger.py +++ b/Lib/idlelib/Debugger.py @@ -13,43 +13,29 @@ class Idb(bdb.Bdb): bdb.Bdb.__init__(self) def user_line(self, frame): - - co_filename = frame.f_code.co_filename -## co_name = frame.f_code.co_name - - ## print>>sys.__stderr__, "*function: ", frame.f_code.co_name - ## print>>sys.__stderr__, "*file: ", frame.f_code.co_filename - ## print>>sys.__stderr__, "*line number: ", frame.f_code.co_firstlineno - ## print>>sys.__stderr__, "*name: ", co_name - ## print>>sys.__stderr__, "*function: ", frame.f_locals.get(co_name,None) - -## try: -## # XXX 12 Dec 2002 CGT TO DO: Find way to get a reference to the -## # XXX currently running function. If the function has an -## # attribute called "DebuggerStepThrough", prevent the debugger -## # from stepping through Idle code. The following doesn't work -## # in instance methods. Hard coded some workarounds. -## func = frame.f_locals[co_name] -## if getattr(func, "DebuggerStepThrough", 0): -## print "XXXX DEBUGGER STEPPING THROUGH" -## self.set_step() -## return -## except: -## pass - - # workaround for the problem above - exclude = ('rpc.py', 'threading.py', '<string>') - for rpcfile in exclude: - if co_filename.count(rpcfile): - self.set_step() - return + if self.in_rpc_code(frame): + self.set_step() + return message = self.__frame2message(frame) self.gui.interaction(message, frame) def user_exception(self, frame, info): + if self.in_rpc_code(frame): + self.set_step() + return message = self.__frame2message(frame) self.gui.interaction(message, frame, info) + def in_rpc_code(self, frame): + if frame.f_code.co_filename.count('rpc.py'): + return True + else: + prev_frame = frame.f_back + if prev_frame.f_code.co_filename.count('Debugger.py'): + # (that test will catch both Debugger.py and RemoteDebugger.py) + return False + return self.in_rpc_code(prev_frame) + def __frame2message(self, frame): code = frame.f_code filename = code.co_filename diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 483a921..ba898b2 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -690,7 +690,7 @@ class PyShell(OutputWindow): text.bind("<<beginning-of-line>>", self.home_callback) text.bind("<<end-of-file>>", self.eof_callback) text.bind("<<open-stack-viewer>>", self.open_stack_viewer) - ##text.bind("<<toggle-debugger>>", self.toggle_debugger) + text.bind("<<toggle-debugger>>", self.toggle_debugger) text.bind("<<open-python-shell>>", self.flist.open_shell) text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer) text.bind("<<view-restart>>", self.view_restart_mark) diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py index 4c3ef3e..8bb1aba 100644 --- a/Lib/idlelib/rpc.py +++ b/Lib/idlelib/rpc.py @@ -558,8 +558,6 @@ class RPCProxy: if not self.__attributes.has_key(name): raise AttributeError, name - __getattr__.DebuggerStepThrough = 1 - def __getattributes(self): self.__attributes = self.sockio.remotecall(self.oid, "__attributes__", (), {}) |