In Python 2, the line offsets in co_lnotab are unsigned bytes (see: Python2 vs. Python3 implementations of Addr2Line). The code for resolving the line in vmprof assumes that they are signed char. This leads to invalid profiles with negative line numbers (see e.g. the minimal repro in #154).
This change updates the code to instead use PyFrame_GetLineNumber, which is available in the runtime since Python >=2.7 so that we don't need to reimplement it here.
In Python 2, the line offsets in
co_lnotab
are unsigned bytes (see: Python2 vs. Python3 implementations of Addr2Line). The code for resolving the line in vmprof assumes that they aresigned char
. This leads to invalid profiles with negative line numbers (see e.g. the minimal repro in #154).This change updates the code to instead use
PyFrame_GetLineNumber
, which is available in the runtime since Python >=2.7 so that we don't need to reimplement it here.Fixes #154.