A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/giraldeau/python-profile-ust below:

giraldeau/python-profile-ust: LTTng-UST profile for CPython

The prototype of UST provider records function entry an return from C and Python code. Requires CPython >= 3.

Available events:

Install dependencies and build:

sudo apt-get install lttng-tools liblttng-ust-dev python3-dev python3-nose libunwind8-dev
python3 setup.py build
sudo python3 setup.py install
from linuxProfile import api
api.enable_ust()
# do something
api.disable_ust()

Events will be recorded to any active LTTng-UST session. (see go.sh for an example of trace management script).

Exceptions are not supported yet. I was not able to trigger PyTrace_EXCEPTION event using "raise" or similar (see nosetests/call_exception.py)

Function name is a start, but the complete namespace should be recorded to avoid ambiguity (such as package.module.class.method). Probably that file and lineno should also be recorded. Suggestions welcome.

Here is an example of the trace for the following foo.py code:

def baz():
    pass

def bar():
    baz()

def foo():
    bar()

if __name__=='__main__':
    foo()
lttng create
lttng enable-event -u python:call,python:c_call,python:return,python:c_return
lttng start
python3 -m linuxProfile.ust foo.py
lttng stop
lttng view

Trace produced:

[17:27:14.772391868] (+?.?????????) berta python:c_call: { cpu_id = 4 }, { co_name = "exec" }
[17:27:14.772405974] (+0.000014106) berta python:call: { cpu_id = 4 }, { co_name = "<module>" }
[17:27:14.772417488] (+0.000011514) berta python:call: { cpu_id = 4 }, { co_name = "foo" }
[17:27:14.772425974] (+0.000008486) berta python:call: { cpu_id = 4 }, { co_name = "bar" }
[17:27:14.772435480] (+0.000009506) berta python:call: { cpu_id = 4 }, { co_name = "baz" }
[17:27:14.772444008] (+0.000008528) berta python:return: { cpu_id = 4 }, { }
[17:27:14.772453087] (+0.000009079) berta python:return: { cpu_id = 4 }, { }
[17:27:14.772461700] (+0.000008613) berta python:return: { cpu_id = 4 }, { }
[17:27:14.772470012] (+0.000008312) berta python:return: { cpu_id = 4 }, { }
[17:27:14.772478886] (+0.000008874) berta python:c_return: { cpu_id = 4 }, { }
[17:27:14.772496402] (+0.000017516) berta python:c_call: { cpu_id = 4 }, { co_name = "disable" }

Source the file env.sh, and then build the project in develop mode:

python3 setup.py develop --install-dir=develop/

The linuxProfile module will be installed as normal user and available for import in Python 3.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4