python / python/cpython

sys.monitoring in 3.13+ does not trigger LINE event when there is no line break before

Open
#155,992 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

interpreter-core topic-profiling type-bug
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

Bug report

Bug description:

In sys.monitoring there seems to be a regression from 3.13+ on where the LINE event does not fire for the first line of a code object if it is on the same line as the def /lambda statement. In Pyhton 3.12 it works. The bug disappears if on all versions if the PY_START event is added to the event mask.

Reproduction code:

import sys

print(f"Python {sys.version}")

TOOL = 1
sys.monitoring.use_tool_id(TOOL, "test")
hits = []
sys.monitoring.register_callback(TOOL, sys.monitoring.events.LINE,
                                 lambda _code, line: hits.append(line))

# A: LINE event never fires in single-line function/lambda on 3.13+
def f(x): return x + 1  #<<<<<<<<<< LINE 12
#f = lambda x: x + 1 # same issue

sys.monitoring.set_local_events(TOOL, f.__code__, sys.monitoring.events.LINE)
f(0)
print(f"Example A: {hits}")

hits.clear()

# B: Adding PY_START makes the LINE fire (even though we have no callback registred for PY_START)
sys.monitoring.set_local_events(TOOL, f.__code__, sys.monitoring.events.LINE | sys.monitoring.events.PY_START)
f(0)
print(f"Example B: {hits}")

hits.clear()

# C: LINE fires but never for first line
def g(x): x = 0; x += 1; \
    x += 2; return x  #<<<<<<<<<< LNE 30
sys.monitoring.set_local_events(TOOL, g.__code__, sys.monitoring.events.LINE)
g(0)
print(f"Example C: {hits}")

The expected output would be as in Python 3.12, we get line events for line 12 and 29 even if PY_START (example B) is not set:

$ python3.12 cpython_issue_monitoring_line_event.py # Only one that fully works
Python 3.12.3 (main, Jun 19 2026, 12:46:00) [GCC 13.3.0]
Example A: [12]
Example B: [12]
Example C: [29, 30]

But the actual output from 3.13 on is missing the first lines:

$ python3.13 cpython_issue_monitoring_line_event.py 
Python 3.13.15 (main, Aug  6 2026, 11:06:22) [GCC 13.3.0]
Example A: []
Example B: [12]
Example C: [30]

I.e., same with:

  • Python 3.14.6 (main, Jun 11 2026, 12:32:48) [GCC 13.3.0]
  • Python 3.15.0rc1 (main, Aug 5 2026, 11:04:42) [GCC 13.3.0]
CPython versions tested on:

3.12, 3.13, 3.14, 3.15

Operating systems tested on:

Linux

Linked PRs
  • gh-155996

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the supplied reproduction on Python 3.12 through 3.15 and compare the LINE event output for examples A, B, and C. Then inspect the sys.monitoring handling of LINE and PY_START events, along with linked PR gh-155996. Done means the first-line events match the expected output without requiring PY_START, with regression coverage for the reported cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.