[Python-de] Tracing der Funktionsaufrufe in Python

Christian Junker christianjunker at gmail.com
Do Nov 3 06:57:18 EDT 2016


Hallo zusammen,

ich interessiere mich dafür, welche Python Funktion/Methode welche C
Funktionen im Kern des CPython Interpreters aufruft (voller Call
Stack) und zusätzlich auch für das Profiling dieser C Funktionen.
Leider konnte ich bisher für diesen Zweck kein Modul finden.

Nehmen wir das Beispiel der print Funktion in Python3. Letztlich ruft
diese, wenn ich den Source Code CPythons richtig verstehe die Funktion
builtin_print (definiert in Python/bltinmodule.c) auf. Diese Funktion
wiederum nutzt Funktionen aus der Python C API, wie bspw.
PyArg_ParseTupleAndKeywords zum Auslesen der übergebenen Parameter,
oder PyFile_WriteObject zum Schreiben des Inputs in den entsprechenden
Outputstream. PyFile_WriteObject wiederum holt sich das Attribut
"write" des Outputstream Objekts und ruft dann PyEval_CallObject
darauf auf, usw.

Ein Modul, das mir diesen Function Stack transparent machen plus ein
bis auf die C Ebene aufgeschlüsseltes Profiling anbieten würde, wäre
eine feine Sache.
Bisher habe ich mich ohne Erfolg an pdb, vmprof, dem Bauen CPythons
mit dem debug flag und ltrace versucht. Sicherlich gäbe es die
Möglichkeit mittels gdb oder valgrind an diese Call Stacks
heranzukommen, aber diese Tools sind nicht gerade leichtgewichtig.

Kennt jemand mögliche Techniken / Module, die mir dies ermöglichen,
oder ist es wirklich nur durch Studium des Interpreter-Quellcodes
möglich?

-- 
Mit freundlichen Grüßen/best regards
Christian Junker


Mehr Informationen über die Mailingliste python-de