python: как отследить порядок выполнения функции в большом проекте - PullRequest
0 голосов
/ 28 мая 2018

Я хочу отследить исполнительное распоряжение функции / класса в рамках терапии.В проекте по умолчанию есть несколько файлов * .py, и я хочу знать, какой файл и класс py были выполнены по порядку.Это звучит глупо, чтобы поставить строку журнала в каждом классе и функции.Как визуализировать этот порядок?

cprofile в основном используется для измерения общего времени.Я также мог бы визуализировать порядок выполнения внутри одного модуля, что является общим вопросом, но визуализировать несколько модулей сложно.

С точки зрения пакета трассировки я не нашел подходящих примеров для работы с большим проектом, таким как scrapy или django.Учебное пособие по трассировке об одном файле Python.

Я хочу проследить несколько * .py файлов в нескольких модулях в большом проекте, например, в scrapy, вместо одного модуля.

ЯЯ знаю о таких инструментах отладки, как pdb, но я считаю неудобным ставить точку останова во всем проекте.Что еще более важно, нелегко суммировать порядок выполнения.

Наконец Я решил с помощью Hunter, который лучше встроенного модуля трассировки.Модуль трассировки не предлагал атрибут include_dir.

Для тех, кто интересуется тем, как отследить все строки разметки.

$PYTHONHUNTER='Q(module_startswith=["scrapy", "your_project"])' scrapy list 


С точки зрения django, отслеживание кодов выполнения rest_frameworkи сохраните в test.log, например:

$PYTHONHUNTER='Q(module_startswith=["rest_framework", "your_project"]), action=CallPrinter(stream=open("test.log", "w"))' python manage.py runserver --noreload --nothreading

1 Ответ

0 голосов
/ 28 мая 2018

trace

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

python -m trace --count -C . somefile.py ...

Выше будет выполнено somefile.py и сгенерированы аннотированные списки всех модулей Python, импортированных во время выполнения в текущий каталог.

PDB

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

Наиболее часто используемая команда:

w (здесь)

  • Печать трассировки стека с самым последним кадром внизу.Стрелка указывает текущий кадр, который определяет контекст большинства команд.

d (собственный)

  • Переместить текущий кадр на один уровень внизв трассировке стека (в новый кадр).

u (p)

  • Переместить текущий кадр на один уровень вверх в трассировке стека(к старому кадру).

Вы также можете проверить этот вопрос Советы по отладке Python

Покрытие

Coverage.py измеряет покрытие кода, обычно во время выполнения теста.Он использует инструменты анализа кода и трассировки, предоставленные в стандартной библиотеке Python, чтобы определить, какие строки являются исполняемыми, а какие были выполнены.

Hunter

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

Действие по умолчанию - просто напечатать исполняемый код.Пример:

import hunter
hunter.trace(module='posixpath')

import os
os.path.join('a', 'b')

Результат в терминале: Hunter Result in terminal

...