]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93696: Fixed the breakpoint display error for frozen modules (#132862)
authorTian Gao <gaogaotiantian@hotmail.com>
Thu, 24 Apr 2025 20:07:27 +0000 (13:07 -0700)
committerGitHub <noreply@github.com>
Thu, 24 Apr 2025 20:07:27 +0000 (16:07 -0400)
Lib/pdb.py
Lib/test/test_pdb.py
Misc/NEWS.d/next/Library/2025-04-24-01-03-40.gh-issue-93696.kM-MBp.rst [new file with mode: 0644]

index 160a7043a30c55fab6abf75b9c179d72d51e8d8a..38a2fbceccc82bc2bce060fd3bb21d0b90c00361 100644 (file)
@@ -1971,12 +1971,6 @@ class Pdb(bdb.Bdb, cmd.Cmd):
         if last is None:
             last = first + 10
         filename = self.curframe.f_code.co_filename
-        # gh-93696: stdlib frozen modules provide a useful __file__
-        # this workaround can be removed with the closure of gh-89815
-        if filename.startswith("<frozen"):
-            tmp = self.curframe.f_globals.get("__file__")
-            if isinstance(tmp, str):
-                filename = tmp
         breaklist = self.get_file_breaks(filename)
         try:
             lines = linecache.getlines(filename, self.curframe.f_globals)
index db79dcd6e65230acdfb9bdbeceb6ddad963e34a6..60a41becea4ca15b2731074b851e70a9dd67c290 100644 (file)
@@ -4260,13 +4260,22 @@ def bœr():
         mod = _create_fake_frozen_module()
         mod.func()
         """
-        commands = """
+        commands_list = """
             break 20
             continue
             step
+            break 4
             list
             quit
         """
+        commands_longlist = """
+            break 20
+            continue
+            step
+            break 4
+            longlist
+            quit
+        """
         with open('gh93696.py', 'w') as f:
             f.write(textwrap.dedent(frozen_src))
 
@@ -4275,9 +4284,14 @@ def bœr():
 
         self.addCleanup(os_helper.unlink, 'gh93696.py')
         self.addCleanup(os_helper.unlink, 'gh93696_host.py')
-        stdout, stderr = self._run_pdb(["gh93696_host.py"], commands)
-        # verify that pdb found the source of the "frozen" function
-        self.assertIn('x = "Sentinel string for gh-93696"', stdout, "Sentinel statement not found")
+
+        # verify that pdb found the source of the "frozen" function and it
+        # shows the breakpoint at the correct line for both list and longlist
+        for commands in (commands_list, commands_longlist):
+            stdout, _ = self._run_pdb(["gh93696_host.py"], commands)
+            self.assertIn('x = "Sentinel string for gh-93696"', stdout, "Sentinel statement not found")
+            self.assertIn('4 B', stdout, "breakpoint not found")
+            self.assertIn('-> def func():', stdout, "stack entry not found")
 
     def test_empty_file(self):
         script = ''
diff --git a/Misc/NEWS.d/next/Library/2025-04-24-01-03-40.gh-issue-93696.kM-MBp.rst b/Misc/NEWS.d/next/Library/2025-04-24-01-03-40.gh-issue-93696.kM-MBp.rst
new file mode 100644 (file)
index 0000000..61448a8
--- /dev/null
@@ -0,0 +1 @@
+Fixed the breakpoint display error for frozen modules in :mod:`pdb`.