]> granicus.if.org Git - python/commitdiff
1. Update debugger to not trace RPC code even when calling Queue and
authorKurt B. Kaiser <kbk@shore.net>
Sat, 10 May 2003 00:09:52 +0000 (00:09 +0000)
committerKurt B. Kaiser <kbk@shore.net>
Sat, 10 May 2003 00:09:52 +0000 (00:09 +0000)
   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

Lib/idlelib/Debugger.py
Lib/idlelib/PyShell.py
Lib/idlelib/rpc.py

index 5f851821768fbc59690cfb5593a7cb7648d0fb25..75e6cc8e847e4f00cd5731b27fc600d2429ae96c 100644 (file)
@@ -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
index 483a92164dd6f7454d46c486cdc71907b602d02b..ba898b2092abfdf1b44346fe7567381c8145670b 100644 (file)
@@ -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)
index 4c3ef3e2ddf6e658d94a273c666f2f18b4ab46e0..8bb1aba2b6b55d38ae92ca01ac1f808a9dd0d2f5 100644 (file)
@@ -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__", (), {})