diff options
author | Tian Gao <gaogaotiantian@hotmail.com> | 2023-04-07 17:57:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-07 17:57:46 (GMT) |
commit | 2667452945eb0a3b8993bb4298ca8da54dc0155a (patch) | |
tree | 09c31a9a4ae88dcb58c00d3c7bb2b3f208d17b35 | |
parent | 800382a2b0980c21dfb2a8ac02aaf1e881f987b9 (diff) | |
download | cpython-2667452945eb0a3b8993bb4298ca8da54dc0155a.zip cpython-2667452945eb0a3b8993bb4298ca8da54dc0155a.tar.gz cpython-2667452945eb0a3b8993bb4298ca8da54dc0155a.tar.bz2 |
gh-103225: Fixed zero lineno issue for pdb (#103265)
Co-authored-by: Artem Mukhin <ortem00@gmail.com>
-rwxr-xr-x | Lib/pdb.py | 14 | ||||
-rw-r--r-- | Lib/test/test_pdb.py | 25 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2023-04-05-01-28-53.gh-issue-103225.QD3JVU.rst | 1 |
3 files changed, 38 insertions, 2 deletions
@@ -1351,7 +1351,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): filename = self.curframe.f_code.co_filename breaklist = self.get_file_breaks(filename) try: - lines, lineno = inspect.getsourcelines(self.curframe) + lines, lineno = self._getsourcelines(self.curframe) except OSError as err: self.error(err) return @@ -1367,7 +1367,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): except: return try: - lines, lineno = inspect.getsourcelines(obj) + lines, lineno = self._getsourcelines(obj) except (OSError, TypeError) as err: self.error(err) return @@ -1662,6 +1662,16 @@ class Pdb(bdb.Bdb, cmd.Cmd): return _rstr(self._format_exc(exc)) return "" + def _getsourcelines(self, obj): + # GH-103319 + # inspect.getsourcelines() returns lineno = 0 for + # module-level frame which breaks our code print line number + # This method should be replaced by inspect.getsourcelines(obj) + # once this bug is fixed in inspect + lines, lineno = inspect.getsourcelines(obj) + lineno = max(1, lineno) + return lines, lineno + # Collect all command help into docstring, if not run with -OO if __doc__ is not None: diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index de2bab4..9ad9a1c 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1675,6 +1675,31 @@ def test_pdb_issue_gh_101673(): (Pdb) continue """ +def test_pdb_issue_gh_103225(): + """See GH-103225 + + Make sure longlist uses 1-based line numbers in frames that correspond to a module + + >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE + ... 'longlist', + ... 'continue' + ... ]): + ... a = 1 + ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + ... b = 2 + > <doctest test.test_pdb.test_pdb_issue_gh_103225[0]>(7)<module>() + -> b = 2 + (Pdb) longlist + 1 with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE + 2 'longlist', + 3 'continue' + 4 ]): + 5 a = 1 + 6 import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + 7 -> b = 2 + (Pdb) continue + """ + @support.requires_subprocess() class PdbTestCase(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2023-04-05-01-28-53.gh-issue-103225.QD3JVU.rst b/Misc/NEWS.d/next/Library/2023-04-05-01-28-53.gh-issue-103225.QD3JVU.rst new file mode 100644 index 0000000..5d1a063 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-04-05-01-28-53.gh-issue-103225.QD3JVU.rst @@ -0,0 +1 @@ +Fix a bug in :mod:`pdb` when displaying line numbers of module-level source code. |