-
-
Notifications
You must be signed in to change notification settings - Fork 30.6k
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 and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-91960: Skip test_gdb if gdb cannot retrive Python frames #108999
Conversation
Without my PR, test on FreeBSD 13.2 with clang version 14.0.5: FAILURE
Tests with my PR. Linux, clang 16Test on Linux, Fedora 38 with clang version 16.0.6 (Fedora 16.0.6-2.fc38):
FreeBSD, clang 14Test on FreeBSD 13.2 with clang version 14.0.5:
|
Skip test_gdb if gdb is unable to retrieve Python frame objects: if a frame is "<optimized out>". When Python is built with "clang -Og", gdb can fail to retrive the 'frame' parameter of _PyEval_EvalFrameDefault(). In this case, tests like py_bt() are likely to fail. Without getting access to Python frames, python-gdb.py is mostly clueless on retrieving the Python traceback. Moreover, test_gdb is no longer skipped on macOS if Python is built with Clang.
542c061
to
66a5f76
Compare
UPDATE: Moreover, test_gdb is no longer skipped on macOS if Python is built with Clang. diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index c05a2d387c..ca50574e46 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -55,10 +55,6 @@ def get_gdb_version():
if not sysconfig.is_python_build():
raise unittest.SkipTest("test_gdb only works on source builds at the moment.")
-if 'Clang' in platform.python_compiler() and sys.platform == 'darwin':
- raise unittest.SkipTest("test_gdb doesn't work correctly when python is"
- " built with LLVM clang")
-
if ((sysconfig.get_config_var('PGO_PROF_USE_FLAG') or 'xxx') in
(sysconfig.get_config_var('PY_CORE_CFLAGS') or '')): |
Test with my PR and Test on Linux: SUCCESS with only 18 skipped tests on 46, nice!
Test on FreeBSD: SUCCESS with only 18 skipped tests on 46, nice!
|
Now I have doubts about my tests on Linux :-( I'm not sure that I passed CC=clang to configure! I redone my tests on Linux:
Oh ok, we are safe :-) |
GitHub Action jobs:
|
Clang just treats |
@@ -247,6 +243,9 @@ def get_stack_trace(self, source=None, script=None, | |||
for pattern in ( | |||
'(frame information optimized out)', | |||
'Unable to read information on python frame', | |||
# gh-91960: On Python built with "clang -Og", gdb gets | |||
# "frame=<optimized out>" for _PyEval_EvalFrameDefault() parameter | |||
'(unable to read python frame information)', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any idea why libpython.py prints this rather than "Unable to read information on python frame"? It's possible that there are just some spots that you missed back in #19081
I'm also afraid that this speaks of a fragility of this approach. When optimizations are enabled, it's not easy to predict exactly what is going to be missing. But I'm happy that this allows to re-enable tests on platforms that were entirely ignored.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any idea why libpython.py prints this rather than "Unable to read information on python frame"? It's possible that there are just some spots that you missed back in #19081
It's likely possible to unify python-gdb.py logs, or use a different regex to match both cases :-) The (unable to read ...)
format is for py-bt
command. Depending on the command, the log is displayed differently. I took the lazy way of just matching the two strings.
Thanks @vstinner for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12. |
Thanks @vstinner for the PR 🌮🎉.. I'm working now to backport this PR to: 3.11. |
…thonGH-108999) Skip test_gdb if gdb is unable to retrieve Python frame objects: if a frame is "<optimized out>". When Python is built with "clang -Og", gdb can fail to retrive the 'frame' parameter of _PyEval_EvalFrameDefault(). In this case, tests like py_bt() are likely to fail. Without getting access to Python frames, python-gdb.py is mostly clueless on retrieving the Python traceback. Moreover, test_gdb is no longer skipped on macOS if Python is built with Clang. (cherry picked from commit fbce43a) Co-authored-by: Victor Stinner <[email protected]>
GH-109010 is a backport of this pull request to the 3.12 branch. |
…thonGH-108999) Skip test_gdb if gdb is unable to retrieve Python frame objects: if a frame is "<optimized out>". When Python is built with "clang -Og", gdb can fail to retrive the 'frame' parameter of _PyEval_EvalFrameDefault(). In this case, tests like py_bt() are likely to fail. Without getting access to Python frames, python-gdb.py is mostly clueless on retrieving the Python traceback. Moreover, test_gdb is no longer skipped on macOS if Python is built with Clang. (cherry picked from commit fbce43a) Co-authored-by: Victor Stinner <[email protected]>
GH-109011 is a backport of this pull request to the 3.11 branch. |
…H-108999) (#109011) gh-91960: Skip test_gdb if gdb cannot retrive Python frames (GH-108999) Skip test_gdb if gdb is unable to retrieve Python frame objects: if a frame is "<optimized out>". When Python is built with "clang -Og", gdb can fail to retrive the 'frame' parameter of _PyEval_EvalFrameDefault(). In this case, tests like py_bt() are likely to fail. Without getting access to Python frames, python-gdb.py is mostly clueless on retrieving the Python traceback. Moreover, test_gdb is no longer skipped on macOS if Python is built with Clang. (cherry picked from commit fbce43a) Co-authored-by: Victor Stinner <[email protected]>
Sadly, this change wasn't enough to fix PPC64LE Fedora Stable Clang 3.x: I created issue #109053. |
…H-108999) (#109010) gh-91960: Skip test_gdb if gdb cannot retrive Python frames (GH-108999) Skip test_gdb if gdb is unable to retrieve Python frame objects: if a frame is "<optimized out>". When Python is built with "clang -Og", gdb can fail to retrive the 'frame' parameter of _PyEval_EvalFrameDefault(). In this case, tests like py_bt() are likely to fail. Without getting access to Python frames, python-gdb.py is mostly clueless on retrieving the Python traceback. Moreover, test_gdb is no longer skipped on macOS if Python is built with Clang. (cherry picked from commit fbce43a) Co-authored-by: Victor Stinner <[email protected]>
When Python is built with "clang -Og", gdb can fail to retrive the 'frame' parameter of _PyEval_EvalFrameDefault(). In this case, tests like py_bt() are likely to fail. Without getting access to Python frames, python-gdb.py is mostly clueless on retrieving the Python traceback.