summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKurt B. Kaiser <kbk@shore.net>2003-05-10 00:09:52 (GMT)
committerKurt B. Kaiser <kbk@shore.net>2003-05-10 00:09:52 (GMT)
commit57bfe5dc5a4873026679fb911939beb69e35a9e8 (patch)
tree80f4879e6a224a7f8ae5994fd2a08694faa63b0a
parent9f545c489ad7831305e9f477fe48e59ae60a5c83 (diff)
downloadcpython-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.py46
-rw-r--r--Lib/idlelib/PyShell.py2
-rw-r--r--Lib/idlelib/rpc.py2
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__", (), {})