Отслеживание кода выполнения - Как узнать, какой код был выполнен в проекте?

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

Отчет должен содержать, например:

  • какие функции были вызваны,
  • в каком порядке,
  • какие классы были созданы и т. д.?

Было бы неплохо иметь некоторый графический вывод для этого... вы знаете, если бы еще дерево и выделил выполненную ветку и т. Д.

Я в основном заинтересован в Python и C (perl тоже подойдет), но если для этого есть какой-либо универсальный инструмент, охватывающий несколько языков (или один инструмент для каждого языка), было бы очень хорошо.

PS: я знаком с отладчиками, но я не хочу переходить каждую строчку кода и проверять правильность этой инструкции. Я предполагаю, что если функции / методы / классы и т. Д. Правильно названы, то можно получить некоторые подсказки о том, где найти нужный фрагмент кода. Но только наименования недостаточно, потому что вы не знаете (из краткого обзора кода), что, если надеяться, функция foo() не требует некоторых данных, сгенерированных неясной функцией bar() и т. Д. По этой причине я ищу что-то, что может визуализировать отношения между работающим кодом.

PS: не знаю, если это вопрос для SO или programmers.stackexchange. Не стесняйтесь двигаться, если хотите. PS: я заметил, что теги, которые я использовал, не рекомендуются, но отслеживание потока выполнения - лучшая фраза для описания этого процесса.

1 ответ

Проверьте освещение Неда Батчелдера и, возможно, библиотеку graphviz/dot под названием pycallgraph. Может быть не совсем то, что вам нужно, а также (только для Python), но на стадионе.

Pycallgraph на самом деле более интересен, потому что он показывает путь выполнения, а не только какие строки кода были выполнены. Он только рендерится в PDF нормально, но вместо этого было не слишком сложно заставить его выполнять SVG (dot/graphviz поддерживает svg и другие форматы, pycallgraph жестко программировал рендеринг PDF).

Ни один из них не будет делать то, что вы хотите, но они являются началом.

Другие вопросы по тегам