vmprof / vmprof-python

vmprof - a statistical program profiler
http://vmprof.com
Other
433 stars 54 forks source link

Use PyFrame_GetLineNumber to get line numbers #198

Closed timpalpant closed 5 years ago

timpalpant commented 5 years ago

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.

Fixes #154.

timpalpant commented 5 years ago

Thanks @fijal ! Any chance I could request a new pypi release when you have a chance?