beetrace allows you to trace a Python process line by line or the functions' entries and returns. It uses USDT(User Statically-Defined Tracing) probes with bpftrace.
-
This package is only available for Linux and requires bpftrace. You can look at the bpftrace installation here.
-
CPython must be configured with the --with-dtrace option.
pip install beetrace
To trace the Python process, use the -p parameter to pass the pid value.
beetrace -p {pid of process}
Let's take a look at the quick example.
$ cat -n example.py
1 import os
2 from time import sleep
3
4
5 def c():
6 x = 1
7
8 def b():
9 y = 2
10 c()
11
12
13 def a():
14 z = 1
15 b()
16
17
18 while True:
19 print(f"PID of program: {os.getpid()}")
20 sleep(1)
21 print("Sleep 1 second")
22 a()
Output:
PID of program: 17988
Sleep 1 second
PID of program: 17988
Sleep 1 second
PID of program: 17988
Sleep 1 second
PID of program: 17988
...
...
...
$ beetrace -p 17988
___ ____ ____ ___ ____ ____ ____ ____
|__] |___ |___ | |__/ |__| | |___
|__] |___ |___ | | \ | | |___ |___
PID: 17988 | Tracing from: python3 example.py
Press Control-C to quit.
Path File:Line Function
/tmp example.py:18 <module>
/tmp example.py:19 <module>
/tmp example.py:20 <module>
/tmp example.py:21 <module>
/tmp example.py:22 <module>
/tmp example.py:14 a
/tmp example.py:15 a
/tmp example.py:9 b
/tmp example.py:10 b
/tmp example.py:6 c
/tmp example.py:18 <module>
/tmp example.py:19 <module>
/tmp example.py:20 <module>
/tmp example.py:21 <module>
/tmp example.py:22 <module>
/tmp example.py:14 a
/tmp example.py:15 a
/tmp example.py:9 b
/tmp example.py:10 b
/tmp example.py:6 c
/tmp example.py:18 <module>
/tmp example.py:19 <module>
/tmp example.py:20 <module>
... ... ...
... ... ...
... ... ...