Skip to content

sys.settrace does not receive opcode events in 3.12.x #114480

Closed
@rijenkii

Description

@rijenkii

Bug report

Bug description:

import sys
from types import FrameType
from typing import Any


def trace(frame: FrameType, event: str, arg: Any):
    frame.f_trace_opcodes = True
    print(frame, event, arg)
    return trace


sys.settrace(trace)

eval('"-".join([x for x in "hello"])')

When running in versions 3.11.7 and 3.13.0a3, opcode events are emitted, though they differ:

podman run --rm -it -v (pwd)/tracetest.py:/tracetest.py:Z python:3.11.7 python /tracetest.py
<frame at 0x7fd3ac579bc0, file '<string>', line 0, code <module>> call None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> line None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> call None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> line None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> line None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> line None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> line None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> line None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> line None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> opcode None
<frame at 0x7fd3ac57a400, file '<string>', line 1, code <listcomp>> return ['h', 'e', 'l', 'l', 'o']
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> opcode None
<frame at 0x7fd3ac579bc0, file '<string>', line 1, code <module>> return h-e-l-l-o
podman run --rm -it -v (pwd)/tracetest.py:/tracetest.py:Z python:3.13.0a3 python /tracetest.py
<frame at 0x7f79bcabca00, file '<string>', line 0, code <module>> call None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> line None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> line None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> line None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> line None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> line None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> line None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> opcode None
<frame at 0x7f79bcabca00, file '<string>', line 1, code <module>> return h-e-l-l-o

However on 3.12.0 and 3.12.1, only call, line and return are emitted:

podman run --rm -it -v (pwd)/tracetest.py:/tracetest.py:Z python:3.12.1 python /tracetest.py
<frame at 0x7ff4180afc40, file '<string>', line 0, code <module>> call None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> line None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> line None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> line None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> line None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> line None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> line None
<frame at 0x7ff4180afc40, file '<string>', line 1, code <module>> return h-e-l-l-o

CPython versions tested on:

3.12

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Labels

type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions