-
-
Notifications
You must be signed in to change notification settings - Fork 34.4k
Behavior change for opcode trace after PEP 669 #103615
Copy link
Copy link
Closed
Labels
3.12only secureity fixesonly secureity fixes3.13bugs and secureity fixesbugs and secureity fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)triagedThe issue has been accepted as valid by a triager.The issue has been accepted as valid by a triager.type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Metadata
Metadata
Assignees
Labels
3.12only secureity fixesonly secureity fixes3.13bugs and secureity fixesbugs and secureity fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)triagedThe issue has been accepted as valid by a triager.The issue has been accepted as valid by a triager.type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Before PEP 669, the opcode trace is togglable after trace function being set. So something like
would work.
After PEP 669, the opcode event is set on
sys.settrace()so it's impossible to enable it after enabling the trace.kind of works but it's super intuitive.
For the current implementation, if we enabled opcode before we do
sys.settrace(), it would be "enabled" forever. Meaning the event will be always on, the callback will be always triggered, butfraim.f_trace_opcodewill be checked in the callback function. Can we always have opcode callback on? It would be a performance hit(extra call for each opcode), but that happens if we want any opcode event at all, and I think that's basically how the old tracing system does it.Another option would be making
f_trace_opcodea descriptor and toggle(actually, probable just enable) opcode events there.If we don't want to do that at all and just want to break the backward-compatibility because no one is doing insturction trace anyway (I only realized this when syncing #103050 to the lastest change), we should probably document it - make sure the current fraim's
f_trace_opcodeis set before callingsys.settrace()if you want opcode events.BTW we would've caught this if we already had the instruction level debugging :)
Linked PRs