[issue42823] Incorrect frame.f_lineno when frame.f_trace is set

Ned Batchelder report at bugs.python.org
Wed Jan 6 08:10:28 EST 2021


Ned Batchelder <ned at nedbatchelder.com> added the comment:

This change seems like it has caused a problem.  Python trace functions behave as they did in Python 3.9, but C trace functions no longer get line numbers for call or return events.


Running this test code:

    def gen(inp):
        for n in inp:
            yield n

    list(gen([1,2,3]))

With my C trace function logging what it is passed, in Python 3.9 I got this:

    trace: CALL @ coverage_test_2616437928787223.py 1
    trace: LINE @ coverage_test_2616437928787223.py 1
    trace: LINE @ coverage_test_2616437928787223.py 5
    trace: CALL @ coverage_test_2616437928787223.py 1
    trace: LINE @ coverage_test_2616437928787223.py 2
    trace: LINE @ coverage_test_2616437928787223.py 3
    trace: RET  @ coverage_test_2616437928787223.py 3
    trace: CALL @ coverage_test_2616437928787223.py 3
    trace: LINE @ coverage_test_2616437928787223.py 2
    trace: LINE @ coverage_test_2616437928787223.py 3
    trace: RET  @ coverage_test_2616437928787223.py 3
    trace: CALL @ coverage_test_2616437928787223.py 3
    trace: LINE @ coverage_test_2616437928787223.py 2
    trace: LINE @ coverage_test_2616437928787223.py 3
    trace: RET  @ coverage_test_2616437928787223.py 3
    trace: CALL @ coverage_test_2616437928787223.py 3
    trace: LINE @ coverage_test_2616437928787223.py 2
    trace: RET  @ coverage_test_2616437928787223.py 2
    trace: RET  @ coverage_test_2616437928787223.py 5

With 3.10 (commit 1a9f51ed12feb4d95ad6d0faf610a030c05b9f5e) I get:

    trace: CALL @ coverage_test_40117094849631774.py 0
    trace: LINE @ coverage_test_40117094849631774.py 1
    trace: LINE @ coverage_test_40117094849631774.py 5
    trace: CALL @ coverage_test_40117094849631774.py 0
    trace: LINE @ coverage_test_40117094849631774.py 2
    trace: LINE @ coverage_test_40117094849631774.py 3
    trace: RET  @ coverage_test_40117094849631774.py 0
    trace: CALL @ coverage_test_40117094849631774.py 0
    trace: LINE @ coverage_test_40117094849631774.py 2
    trace: LINE @ coverage_test_40117094849631774.py 3
    trace: RET  @ coverage_test_40117094849631774.py 0
    trace: CALL @ coverage_test_40117094849631774.py 0
    trace: LINE @ coverage_test_40117094849631774.py 2
    trace: LINE @ coverage_test_40117094849631774.py 3
    trace: RET  @ coverage_test_40117094849631774.py 0
    trace: CALL @ coverage_test_40117094849631774.py 0
    trace: LINE @ coverage_test_40117094849631774.py 2
    trace: RET  @ coverage_test_40117094849631774.py 0
    trace: RET  @ coverage_test_40117094849631774.py 0

All of the call and return events now get a frame with f_lineno == 0.

Python trace functions seem unaffected.

The C code producing this debug output is here: https://github.com/nedbat/coveragepy/blob/a498ebc28273fd21b6a047a173b2e4443b91f563/coverage/ctracer/tracer.c#L786-L813

----------
nosy: +nedbat
status: closed -> open

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue42823>
_______________________________________


More information about the Python-bugs-list mailing list