Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Behavior change for opcode trace after PEP 669 #103615

Closed
Assignees
gaogaotiantian
Labels
3.12only security fixes3.13bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)triagedThe issue has been accepted as valid by a triager.type-bugAn unexpected behavior, bug, or error
@gaogaotiantian

Description

@gaogaotiantian

Before PEP 669, the opcode trace is togglable after trace function being set. So something like

importsysdefopcode_trace_func(frame,event,arg):print(frame,event)returnopcode_trace_funcsys.settrace(opcode_trace_func)sys._getframe().f_trace=opcode_trace_funcsys._getframe().f_trace_opcodes=Truedeff():a= [1,2,3]returna[0]f()

would work.

After PEP 669, the opcode event is set onsys.settrace() so it's impossible to enable it after enabling the trace.

sys._getframe().f_trace_opcodes=Truesys.settrace(opcode_trace_func)sys._getframe().f_trace=opcode_trace_func

kind of works but it's super intuitive.

For the current implementation, if we enabled opcode before we dosys.settrace(), it would be "enabled" forever. Meaning the event will be always on, the callback will be always triggered, butframe.f_trace_opcode will 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 makingf_trace_opcode a 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 frame'sf_trace_opcode is 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

Metadata

Metadata

Labels

3.12only security fixes3.13bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)triagedThe issue has been accepted as valid by a triager.type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp