Title: Have debug builds support gdb extension by default · Issue #109270 · python/cpython · GitHub
Open Graph Title: Have debug builds support gdb extension by default · Issue #109270 · python/cpython
X Title: Have debug builds support gdb extension by default · Issue #109270 · python/cpython
Description: Feature or enhancement Proposal: While investigating #91961 and specifically #108999, we noticed that test_gdb fails (or used to fail) very frequently on buildbots, or some tests are skipped. Most of the times, the skips/failures are on ...
Open Graph Description: Feature or enhancement Proposal: While investigating #91961 and specifically #108999, we noticed that test_gdb fails (or used to fail) very frequently on buildbots, or some tests are skipped. Most ...
X Description: Feature or enhancement Proposal: While investigating #91961 and specifically #108999, we noticed that test_gdb fails (or used to fail) very frequently on buildbots, or some tests are skipped. Most ...
Opengraph URL: https://github.com/python/cpython/issues/109270
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Have debug builds support gdb extension by default","articleBody":"# Feature or enhancement\n\n### Proposal:\n\nWhile investigating https://github.com/python/cpython/pull/91961 and specifically https://github.com/python/cpython/pull/108999, we noticed that test_gdb fails (or used to fail) very frequently on buildbots, or some tests are skipped.\n\nMost of the times, the skips/failures are on clang builds, which often don't have the necessary information to inspect Python frames. Compiling with the right optimization options (or, rather, without optimization) allows gdb to inspect Python frames on clang builds just fine (or almost).\n\nI would like to propose to set an expectation that **a `--with-pydebug` build should be debuggable with the Python extension to gdb in most configurations *by default*** (that is, without additional compiler flags or shenanigans), and attempt to guarantee this as much as possible. This should be possible on basically all platforms where gcc or clang are used, and it's already basically certain with gcc.\n\n---\n\nSome details of what the proposal entails as far as I understand:\n\n1) Easy one: don't [imply `-Og` for debug builds](https://github.com/python/cpython/blob/60b8341d07649194aa73108369a1e04ed1848794/configure.ac#L2032-L2036) on clang. `-Og` on clang is the same as `-O1` (but it could change in the future) and performs certain (which?) optimization passes that don't work well with debug inspection. `-fno-inline` is not sufficient to prevent that, although some other option might be. Otherwise, defaulting to `-O0` will work, but might take longer to compile and generate very inefficient code. If this is acceptable, it could be all there is to it :)\n\n2) During my testing, I saw one test failed/skipped (`test_print_after_up`) that had one more python frame than expected, i.e. it worked with one more `py-up`. I haven't investigated why, so it could be a legitimate case that tests should consider, or a bug, or just an artifact given by different compile options (maybe gcc -Og inlines something and clang -O0 doesn't). In any case, skipping might mask a potential issue that could be fixable. Which brings to point 3.\n\n3) How to test? test_gdb skips in many cases that are indistinguishable from failures. Knowing that you cannot read a Python frame could mean that the build doesn't include debug information, but it can also mean that the `libpython.py` extension is making incorrect assumptions. IMO it would be good to have some setups where tests are expected to pass (and ensure buildbots are covering those) and fewer or no tests are allowed to skip. This way test_gdb itself can be used to cover not only that the gdb extension works, but also that (that specific build of) CPython is debuggable. It could be an explicit flag like \"this build should be debuggable\", exposed via `sysconfig`[^1].\n\n[^1]: test_gdb checks sysconfig for compiler flags to infer whether the build is optimized. This is on a similar track as what I'm suggesting in point 3, but the current behavior is to use this information to skip tests early. Even if the build is not optimized, tests can be skipped anyway, and failures are masked. Besides, the check looks for `-Og` which works for gcc but not for clang.\n\n---\n\nEven if the proposal to offer some kind of debuggability-by-default with `--with-pydebug` is rejected, maybe some work can be done to improve the clang situation.\n\n### Has this already been discussed elsewhere?\n\nThis is a minor feature, which does not need previous discussion elsewhere\n\n### Links to previous discussion of this feature:\n\n_No response_","author":{"url":"https://github.com/sorcio","@type":"Person","name":"sorcio"},"datePublished":"2023-09-11T14:27:32.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/109270/cpython/issues/109270"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:e6131cd2-5e6d-184a-daae-230976accef5 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8EEA:2F5B11:32DA44:456142:6969D9A3 |
| html-safe-nonce | 9d292aeae9daaabed353c4b4d3e63102e51b453f1880b1d48c0e03effcab55ce |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4RUVBOjJGNUIxMTozMkRBNDQ6NDU2MTQyOjY5NjlEOUEzIiwidmlzaXRvcl9pZCI6IjE2OTk3MTk5MTMxNTc1NDg0NTEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 953a22b5d4bab69b5212cb86fcd5804ec5ca64ee32662486dcbc5c718cd08496 |
| hovercard-subject-tag | issue:1890645971 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/109270/issue_layout |
| twitter:image | https://opengraph.githubassets.com/8767ad9b363773e56f44a307ecd1cd6c7e6624a9d27c2179e82cdcfa5f6e75ec/python/cpython/issues/109270 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/8767ad9b363773e56f44a307ecd1cd6c7e6624a9d27c2179e82cdcfa5f6e75ec/python/cpython/issues/109270 |
| og:image:alt | Feature or enhancement Proposal: While investigating #91961 and specifically #108999, we noticed that test_gdb fails (or used to fail) very frequently on buildbots, or some tests are skipped. Most ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | sorcio |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7b32f1c7c4549428ee399213e8345494fc55b5637195d3fc5f493657579235e8 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | bdde15ad1b403e23b08bbd89b53fbe6bdf688cad |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width