Debugging#

IDE debuggers, like VS Code and PyCharm use a callback system in Python called tracing. By default, Pyjion has tracing disabled. To debug Python code with Pyjion, you must enable tracing.

Call tracing#

Python’s tracing callback API adds overhead to execution. To improve performance, Pyjion will only compile these callbacks when tracing is enabled ahead of time.

Before calling sys.settrace():

import sys
import pyjion

def custom_tracer(frame, event, args):
    ...

def _f():
    a = 1
    b = 2
    c = 3
    d = 4
    return a + b + c + d

pyjion.enable()
sys.settrace(custom_tracer)
assert _f() == 10
sys.settrace(None)

Profiling#

Python profilers (like the profile module) require runtime callbacks in Python execution.

See Profiling <https://docs.python.org/3/library/profile.html> for the Python reference.

Call sys.setprofile() to set a profile function:

import sys
import pyjion

def custom_profiler(frame, event, args):
    ...

def _f():
    a = 1
    b = 2
    c = 3
    d = 4
    return a + b + c + d

pyjion.enable()
sys.setprofile(custom_profiler)
assert _f() == 10
sys.setprofile(None)