bpo-34989: python-gdb.py: fix current_line_num() by vstinner · Pull Request #9889 · python/cpython (original) (raw)
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
python-gdb.py now handles errors on computing the line number
of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on
calling addr2line(), instead of failing with a surprising "<class
'TypeError'> 'FakeRepr' object is not subscriptable" error. - All callers of current_line_num() now handle current_line_num()
returning None. - PyFrameObjectPtr.current_line() now also catchs IndexError on
getting a line from the Python source file.
https://bugs.python.org/issue34989
python-gdb.py now handles errors on computing the line number of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on calling addr2line(), instead of failing with a surprising "<class 'TypeError'> 'FakeRepr' object is not subscriptable" error.
- All callers of current_line_num() now handle current_line_num() returning None.
- PyFrameObjectPtr.current_line() now also catchs IndexError on getting a line from the Python source file.
ambv approved these changes Oct 15, 2018
Contributor
ambv left a comment
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great and fixes a problem I've seen in the past. I left a nit and two questions for your consideration, Victor.
lineno = self.current_line_num() |
if lineno is None: |
return '(failed to get frame line number)' |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tiny nit: that could also have a blank line after to make it obvious you're returning early.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I concur, done.
try: |
---|
f = open(os_fsencode(filename), 'r') |
with open(os_fsencode(filename), 'r') as fp: |
lines = fp.readlines() |
except IOError: |
return None |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we maybe return '(failed to read source)'
instead of "None" here? That would maybe be more descriptive, what do you think?
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This code mimicks linecache.getline() which is used to render a traceback.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To be honest, I was also surprised at the first read, and I had to double check when I saw your comment :-D
# Convert from 1-based current_line_num to 0-based list offset |
---|
return lines[lineno - 1] |
except IndexError: |
return None |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here. If we have an index error that means the file did not match. Maybe we should say this to the user?
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto, linecache.getline() behaves the same, and the code mimicks linecache's behaviour.
Thanks @vstinner for the PR 🌮🎉.. I'm working now to backport this PR to: 3.7.
🐍🍒⛏🤖
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request
python-gdb.py now handles errors on computing the line number of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on calling addr2line(), instead of failing with a surprising "<class 'TypeError'> 'FakeRepr' object is not subscriptable" error.
- All callers of current_line_num() now handle current_line_num() returning None.
- PyFrameObjectPtr.current_line() now also catchs IndexError on getting a line from the Python source file. (cherry picked from commit 2e438cc)
Co-authored-by: Victor Stinner vstinner@redhat.com
Thanks @vstinner for the PR 🌮🎉.. I'm working now to backport this PR to: 3.6.
🐍🍒⛏🤖
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request
python-gdb.py now handles errors on computing the line number of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on calling addr2line(), instead of failing with a surprising "<class 'TypeError'> 'FakeRepr' object is not subscriptable" error.
- All callers of current_line_num() now handle current_line_num() returning None.
- PyFrameObjectPtr.current_line() now also catchs IndexError on getting a line from the Python source file. (cherry picked from commit 2e438cc)
Co-authored-by: Victor Stinner vstinner@redhat.com
miss-islington added a commit that referenced this pull request
python-gdb.py now handles errors on computing the line number of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on calling addr2line(), instead of failing with a surprising "<class 'TypeError'> 'FakeRepr' object is not subscriptable" error.
- All callers of current_line_num() now handle current_line_num() returning None.
- PyFrameObjectPtr.current_line() now also catchs IndexError on getting a line from the Python source file. (cherry picked from commit 2e438cc)
Co-authored-by: Victor Stinner vstinner@redhat.com
miss-islington added a commit that referenced this pull request
python-gdb.py now handles errors on computing the line number of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on calling addr2line(), instead of failing with a surprising "<class 'TypeError'> 'FakeRepr' object is not subscriptable" error.
- All callers of current_line_num() now handle current_line_num() returning None.
- PyFrameObjectPtr.current_line() now also catchs IndexError on getting a line from the Python source file. (cherry picked from commit 2e438cc)
Co-authored-by: Victor Stinner vstinner@redhat.com
vstinner added a commit that referenced this pull request
python-gdb.py now handles errors on computing the line number of a Python frame.
Changes:
- PyFrameObjectPtr.current_line_num() now catchs any Exception on calling addr2line(), instead of failing with a surprising "<class 'TypeError'> 'FakeRepr' object is not subscriptable" error.
- All callers of current_line_num() now handle current_line_num() returning None.
- PyFrameObjectPtr.current_line() now also catchs IndexError on getting a line from the Python source file.
(cherry picked from commit 2e438cc)
Thanks Łukasz Langa @ambv fo the review!
vstinner added a commit that referenced this pull request
CuriousLearner added a commit to CuriousLearner/cpython that referenced this pull request
- master: (621 commits)
Update opcode.h header comment to mention the source data file (pythonGH-9935)
bpo-34936: Fix TclError in tkinter.Spinbox.selection_element(). (pythonGH-9760)
Updated documentation on logging.debug(). (pythonGH-9946)
bpo-34765: Update the install-sh file (pythonGH-9592)
bpo-35008: Fix possible leaks in Element.setstate(). (pythonGH-9924)
bpo-35011: Restore use of pyexpatns.h in libexpat (pythonGH-9939)
bpo-24658: Fix read/write greater than 2 GiB on macOS (pythonGH-1705)
Add missing comma to wsgiref doc (pythonGH-9932)
bpo-23420: Verify the value of '-s' when execute the CLI of cProfile (pythonGH-9925)
Doc: Fix is_prime (pythonGH-9909)
In email docs, correct spelling of foregoing (python#9856)
In email.parser in message_from_bytes, update
strict
topolicy
(python#9854) bpo-34997: Fix test_logging.ConfigDictTest.test_out_of_order (pythonGH-9913) Added CLI starter example to logging cookbook. (pythonGH-9910) bpo-34783: Fix test_nonexisting_script() (pythonGH-9896) bpo-23554: Change echo server example class name from EchoServerClientProtocol to EchoServerProtocol (pythonGH-9859) bpo-34989: python-gdb.py: fix current_line_num() (pythonGH-9889) Stop using deprecated logging API in Sphinx suspicious checker (pythonGH-9875) fix dangling keyfunc examples in documentation of heapq and sorted (python#1432) bpo-34844: logging.Formatter enhancement - Ensure style and format string matches in logging.Formatter (pythonGH-9703) ...
CuriousLearner added a commit to CuriousLearner/cpython that referenced this pull request
- master: (1787 commits)
Update opcode.h header comment to mention the source data file (pythonGH-9935)
bpo-34936: Fix TclError in tkinter.Spinbox.selection_element(). (pythonGH-9760)
Updated documentation on logging.debug(). (pythonGH-9946)
bpo-34765: Update the install-sh file (pythonGH-9592)
bpo-35008: Fix possible leaks in Element.setstate(). (pythonGH-9924)
bpo-35011: Restore use of pyexpatns.h in libexpat (pythonGH-9939)
bpo-24658: Fix read/write greater than 2 GiB on macOS (pythonGH-1705)
Add missing comma to wsgiref doc (pythonGH-9932)
bpo-23420: Verify the value of '-s' when execute the CLI of cProfile (pythonGH-9925)
Doc: Fix is_prime (pythonGH-9909)
In email docs, correct spelling of foregoing (python#9856)
In email.parser in message_from_bytes, update
strict
topolicy
(python#9854) bpo-34997: Fix test_logging.ConfigDictTest.test_out_of_order (pythonGH-9913) Added CLI starter example to logging cookbook. (pythonGH-9910) bpo-34783: Fix test_nonexisting_script() (pythonGH-9896) bpo-23554: Change echo server example class name from EchoServerClientProtocol to EchoServerProtocol (pythonGH-9859) bpo-34989: python-gdb.py: fix current_line_num() (pythonGH-9889) Stop using deprecated logging API in Sphinx suspicious checker (pythonGH-9875) fix dangling keyfunc examples in documentation of heapq and sorted (python#1432) bpo-34844: logging.Formatter enhancement - Ensure style and format string matches in logging.Formatter (pythonGH-9703) ...