Как отследить все вызовы функций и аргументы автоматически? - PullRequest
0 голосов
/ 14 ноября 2018

В целях создания специализированного отладчика для моего кода я хотел бы отследить некоторые функции в моем коде и записать аргументы, полученные в каждом вызове.

Я бы хотел сделать это без добавления строки кода для каждой функции или даже декоратора вокруг всех функций, но для того, чтобы установить трассировку на протяжении всего прогона.

Это похоже на то, что вы можете сделать с sys.settrace в модуле sys: https://docs.python.org/2/library/sys.html

за исключением того, что, насколько я могу судить, трассировка не включает аргументы функций.

Итак, я хотел бы написать функцию, которая выглядит примерно так:

def tracing_func(func_name, args):
    if func_name in ['func', 'foo']:
         log_func_args(func_name, args)

где log_func_args записывает его в файл для последующего анализа.

Затем задайте, чтобы эта функция вызывалась всякий раз, когда вызывается любая функция в моем коде, с именем и аргументами функций.

Можно ли это сделать?

1 Ответ

0 голосов
/ 21 ноября 2018

Хорошо, так что sys.settrace хорошо справляется с задачей:

https://docs.python.org/2/library/sys.html#sys.settrace

и пример:

https://pymotw.com/2/sys/tracing.html

обратите внимание, что функция, которую вы передаете settrace, должна возвращать ссылку на себя (или на другую функцию для дальнейшей трассировки в этой области).

...