gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:56:51 27 4
gpt4 key购买 nike

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

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

在跟踪包方面,我没有找到合适的示例来处理像 scrapy 或 django 这样的大型项目。跟踪使用教程是关于单个 python 文件的。

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

我知道像 pdb 这样的调试工具,但我发现在整个项目中设置断点很麻烦。更重要的是,总结执行顺序并不容易。

最后我用Hunter解决了,比内置的trace模块好。跟踪模块没有提供 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

最佳答案

追踪

The trace module allows you to trace program execution, generate annotated statement coverage listings, print caller/callee relationships and list functions executed during a program run. It can be used in another program or from the command line.

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

上面的代码将执行 somefile.py 并生成在执行期间导入的所有 Python 模块的注释列表到当前目录。

PDB

The module pdb defines an interactive source code debugger for Python programs. It supports setting (conditional) breakpoints and single stepping at the source line level, inspection of stack frames, source code listing, and evaluation of arbitrary Python code in the context of any stack frame. It also supports post-mortem debugging and can be called under program control.

最常用的命令:

w(这里)

  • 打印堆栈跟踪,最近的帧在底部。一个箭头表示当前帧,决定了上下文大多数命令。

d(拥有)

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

你(p)

  • 将当前帧在堆栈跟踪中向上移动一层(到一个较旧的框架)。

你也可以查看这个问题Python debugging tips

覆盖范围

Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard library to determine which lines are executable, and which have been executed.

猎人

Hunter is a flexible code tracing toolkit, not for measuring coverage, but for debugging, logging, inspection and other nefarious purposes.

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

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

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

终端结果: Hunter Result in terminal

关于python:如何跟踪大型项目中的函数执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com