我想跟踪scrapy框架中的函数/类执行顺序。默认项目中有多个* .py文件,我想知道哪个py文件和类已按顺序执行。将记录器线放在每个类和功能中听起来很愚蠢。如何可视化此订单?
cprofile主要用于测量总时间。我还可以将一个模块内的执行顺序可视化,这是常见问题,但是可视化多个模块很困难。
就跟踪包而言,我没有找到合适的例子来处理像scrapy或django这样的大型项目。跟踪使用教程是关于单个python文件的。
我想跟踪大型项目中多个模块中的多个* .py文件,例如scrapy,而不是仅仅一个模块。
我知道像pdb这样的调试工具,但我发现在整个项目中设置断点很麻烦。更重要的是,总结执行顺序并不容易。
终于我使用Hunter解决了,这比内置跟踪模块更好。跟踪模块未提供include_dir属性。
对于那些对如何追踪所有scrapy系列有好奇心的人。
$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
答案 0 :(得分:6)
trace模块允许您跟踪程序执行,生成 带注释的语句覆盖列表,打印呼叫者/被呼叫者 程序运行期间执行的关系和列表函数。它可以 用于其他程序或命令行。
python -m trace --count -C . somefile.py ...
上面将执行somefile.py
并生成在执行期间导入到当前目录中的所有Python模块的注释列表。
模块pdb定义了Python的交互式源代码调试器 程式。它支持设置(条件)断点和单个 踩到源线级,检查堆栈帧,源 代码清单,以及上下文中任意Python代码的评估 任何堆栈帧。它还支持事后调试,可以 在程序控制下调用。
最常用的命令:
<强> W(在这里)强>
<强> d(自己)强>
<强> U(p)的强>
您还可以查看此问题Python debugging tips
Coverage.py衡量代码覆盖率,通常在测试执行期间。 它使用了代码分析工具和跟踪提供的钩子 Python标准库,用于确定哪些行是可执行的,以及 已被执行。
Hunter是一个灵活的代码跟踪工具包,不适用于测量覆盖范围, 但是用于调试,记录,检查和其他恶意目的。
默认操作是仅打印正在执行的代码。例如:
import hunter
hunter.trace(module='posixpath')
import os
os.path.join('a', 'b')
答案 1 :(得分:0)
跟踪功能执行顺序的最佳工具肯定是viztracer。我不得不说,在理解更大的项目时,可视化是一个巨大的因素。
与冷终端ascii相比,这样的交互式图像使您更容易了解程序中发生的事情。
此外,它也是一种非侵入式工具,这意味着您无需编写任何代码。只需安装并运行它即可。
pip install viztracer
viztracer your_script.py
这里的另一个重要因素是viztracer支持多线程和多进程,并且可以在同一时间线上以单独的信号显示它们,而这在终端显示中是无法实现的。