]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #1429539: pdb now correctly initializes the __main__ module for
authorGeorg Brandl <georg@python.org>
Tue, 13 Mar 2007 21:58:44 +0000 (21:58 +0000)
committerGeorg Brandl <georg@python.org>
Tue, 13 Mar 2007 21:58:44 +0000 (21:58 +0000)
the debugged script, which means that imports from __main__ work
correctly now.

Lib/pdb.py
Misc/NEWS

index 5778c05d94b0760ffc1ad9a2654f7aa368a16451..4b5d1b1e7911ae7d433ee9bc5f2ffe29ca8326ce 100755 (executable)
@@ -1147,12 +1147,18 @@ see no sign that the breakpoint was reached.
         return None
 
     def _runscript(self, filename):
-        # Start with fresh empty copy of globals and locals and tell the script
-        # that it's being run as __main__ to avoid scripts being able to access
-        # the pdb.py namespace.
-        globals_ = {"__name__" : "__main__"}
-        locals_ = globals_
-
+        # The script has to run in __main__ namespace (or imports from
+        # __main__ will break).
+        # 
+        # So we clear up the __main__ and set several special variables
+        # (this gets rid of pdb's globals and cleans old variables on restarts).
+        import __main__
+        __main__.__dict__.clear()
+        __main__.__dict__.update({"__name__"    : "__main__",
+                                  "__file__"    : filename,
+                                  "__builtins__": __builtins__,
+                                 })
+        
         # When bdb sets tracing, a number of call and line events happens
         # BEFORE debugger even reaches user's code (and the exact sequence of
         # events depends on python version). So we take special measures to
@@ -1162,7 +1168,7 @@ see no sign that the breakpoint was reached.
         self.mainpyfile = self.canonic(filename)
         self._user_requested_quit = 0
         statement = 'execfile( "%s")' % filename
-        self.run(statement, globals=globals_, locals=locals_)
+        self.run(statement
 
 # Simplified interface
 
@@ -1259,5 +1265,6 @@ def main():
 
 
 # When invoked as main program, invoke the debugger on a script
-if __name__=='__main__':
-    main()
+if __name__ == '__main__':
+    import pdb
+    pdb.main()
index e8481ea6453a1107bb6d023a63003d201954c6e9..595d1ea5b59264a4820ab61602c8cd44369ab0ae 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -170,6 +170,10 @@ Core and builtins
 Library
 -------
 
+- Patch #1429539: pdb now correctly initializes the __main__ module for
+  the debugged script, which means that imports from __main__ work
+  correctly now.
+
 - The nonobvious commands.getstatus() function is now deprecated.
 
 - Patch #1393667: pdb now has a "run" command which restarts the debugged