Skip to content

gh-142186: make PY_UNWIND available as a local event - #142179

Closed
P403n1x87 wants to merge 2 commits into
python:mainfrom
P403n1x87:py-unwind-local-event
Closed

gh-142186: make PY_UNWIND available as a local event#142179
P403n1x87 wants to merge 2 commits into
python:mainfrom
P403n1x87:py-unwind-local-event

Conversation

@P403n1x87

@P403n1x87P403n1x87 commented Dec 2, 2025

Copy link
Copy Markdown
Contributor

We make the PY_UNWIND monitoring event available as a code-local event to allow trapping on function exit events when an exception bubbles up. This complements the PY_RETURN event by allowing to catch any function exit event.

Example

importrandom, sysm, e=sys.monitoring, sys.monitoring.eventsm.use_tool_id(0, "debugger")
defmonitor(event):
def_(f):
m.register_callback(0, event, f)
return_@monitor(e.PY_START)def_(*_, **__):
print("entering", sys._getframe(1))
@monitor(e.PY_UNWIND)def_(*_, **__):
print("exiting ", sys._getframe(1), "with exception")
deffoo():
raiseRuntimeError()
defbar():
returnfoo()
defbaz():
returnbar()
m.set_local_events(0, random.choice([foo, bar, baz]).__code__, e.PY_UNWIND|e.PY_START)
try:
baz()
exceptException:
pass# entering <frame at 0x101602f80, file 'test_py_unwind_local.py', line 34, code baz># exiting <frame at 0x101602f80, file 'test_py_unwind_local.py', line 35, code baz> with exception

@P403n1x87P403n1x87 changed the title Make PY_UNWIND available as a local eventgh-142186: make PY_UNWIND available as a local eventDec 2, 2025
Comment on lines +27 to +33
((ev) <= PY_MONITORING_EVENT_STOP_ITERATION)

#define PY_MONITORING_EVENT_PY_UNWIND 11

#define PY_MONITORING_IS_LOCAL_EVENT(ev) \
((ev) < _PY_MONITORING_LOCAL_EVENTS)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO all these data should be encoded in a "table", e.g.

typedefstruct_monitoring_event {
intid;
boollocal;
boolinstrumented;
char*name; // maybe
} monitoring_event_t;
monitoring_event_tMONITORING_EVENTS[] = { ... };
#definePY_MONITORING_IS_INSTRUMENTED_EVENT(ev) (MONITORING_EVENTS[ev].instrumented)

@P403n1x87
P403n1x87 marked this pull request as ready for review December 16, 2025 13:57
We make the PY_UNWIND monitoring event available as a code-local
event to allow trapping on function exit events when an exception
bubbles up. This complements the PY_RETURN event by allowing to
catch any function exit event.
@P403n1x87
P403n1x87force-pushed the py-unwind-local-event branch from b5553ab to 1a3e828CompareMarch 19, 2026 12:04
@github-actions

Copy link
Copy Markdown

This PR is stale because it has been open for 30 days with no activity.

@github-actionsgithub-actionsBot added the stale Stale PR or inactive for long period of time. label May 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting reviewstaleStale PR or inactive for long period of time.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@P403n1x87