Warm tip: This article is reproduced from serverfault.com, please click

visualization-python:如何跟踪大型项目中的函数执行顺序

(visualization - python: How to trace function execution order in large project)

发布于 2018-05-28 03:47:05

我想在scrapy框架中跟踪功能/类执行顺序。默认项目中有多个* .py文件,我想知道哪个py文件和类已按顺序执行。在每个类和每个函数中都放置记录器行听起来很愚蠢。如何可视化此顺序?

cprofile主要用于测量总时间。我还可以可视化一个模块内的执行顺序,这是常见的问题,但是很难可视化多个模块。

在跟踪包方面,我没有找到合适的示例来处理诸如scrapy或django之类的大型项目。跟踪用法教程仅涉及一个python文件。

我想在一个大型项目(例如scrapy)中的多个模块中跟踪多个* .py文件,而不是一个模块。

我知道像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
Questioner
anonymous
Viewed
0
H.Tibat 2018-05-28 12:07:07

痕迹

跟踪模块允许你跟踪一个程序运行时执行的程序执行,产生注释语句覆盖列表,打印主叫/被叫关系和列表功能。可以在其他程序中或从命令行中使用它。

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

上面的代码将执行somefile.py并生成在执行过程中导入到当前目录中的所有Python模块的带注释的清单。

PDB

pdb模块为Python程序定义了一个交互式源代码调试器。它支持在源代码行级别设置(条件)断点和单步执行,检查堆栈框架,源代码列表以及在任何堆栈框架的上下文中评估任意Python代码。它还支持事后调试,可以在程序控制下调用。

最常用的命令:

在哪里)

  • 打印堆栈跟踪,最后一帧显示在底部。箭头指示当前框架,该框架确定大多数命令的上下文。

下)

  • 将当前帧在堆栈跟踪中向下移动一级(到新的帧)。

向上)

  • 将当前帧在堆栈跟踪中上移一级(到较旧的帧)。

你还可以检查此问题Python调试技巧

覆盖范围

Coverage.py通常在测试执行期间测量代码覆盖率。它使用Python标准库中提供的代码分析工具和跟踪钩子来确定哪些行是可执行的,哪些行已执行。

猎人

Hunter是一种灵活的代码跟踪工具包,不是用于衡量覆盖范围,而是用于调试,记录,检查和其他有害目的。

默认操作是仅打印正在执行的代码。例子:

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

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

结果在终端: 终端中的猎人结果