使用 pyftrace
跟踪你的 Python 代码.
pyftrace 是一个 开源、轻量级的 Python 函数跟踪工具,
使你能够快速进行代码分析和调试。
安装 #
只需执行:
$ pip install pyftrace
基础跟踪 #
示例代码:
foo定义在第 1 行,在第 8 行被调用,返回 10bar定义在第 5 行,在第 2 行被调用,返回 20
foobar.py
1 def foo():
2 bar()
3 return 10
4
5 def bar():
6 return 20
7
8 foo()
只需一行命令,即可快速查看函数调用与返回。
$ pyftrace foobar.py
Running script: examples/foobar.py
Called foo from line 9
Called bar from line 2
Returning bar-> 20
Called bar from line 3
Returning bar-> 20
Returning foo-> 10
内置函数 & 路径跟踪 #
pyftrace 支持外部库函数以及内置函数的跟踪。
builtins.py
1 import os
2
3 def foo():
4 print(os.path.basename(__file__))
5
6 foo()
你将获得如下格式的输出:
-
Called {function} @ {defined_path}:{line_number} from {called_path}:{line_number} -
Returning {function} -> {return value} @ {returned_path}
$ pyftrace --verbose --path builtins.py
Running script: builtins.py
Called foo@/workspace/builtins.py:3 from /workspace/builtins.py:5
Called basename@/usr/lib/python3.8/posixpath.py:140 from /workspace/builtins.py:4
Called fspath from /usr/lib/python3.8/posixpath.py:142
Returning fspath
Called _get_sep@/usr/lib/python3.8/posixpath.py:41 from /usr/lib/python3.8/posixpath.py:143
Called isinstance from /usr/lib/python3.8/posixpath.py:42
Returning isinstance
Returning _get_sep-> / @ /usr/lib/python3.8/posixpath.py
Called rfind from /usr/lib/python3.8/posixpath.py:144
Returning rfind
Returning basename-> builtins.py @ /usr/lib/python3.8/posixpath.py
Called print from /workspace/builtins.py:4
builtins.py
Returning print
Returning foo-> None @ /workspace/builtins.py
执行报告 #
你还可以查看每个函数的调用次数或执行时长。
fibonacci.py
1 def fibonacci(n):
2 if n <= 1:
3 return n
4 else:
5 return fibonacci(n-1) + fibonacci(n-2)
6
7 result = fibonacci(5)
$ pyftrace --report fibonacci.py
Running script: fibonacci.py
Function Name | Total Execution Time | Call Count
---------------------------------------------------------
fibonacci | 0.000332 seconds | 15
TUI 模式 #
pyftrace 还提供了终端用户界面 (TUI) 模式。
让你可以更直观地分析大型、复杂的代码。
PgUp或PgDn:向上或向下翻一整页。Home或End:跳转到跟踪的开头或末尾。←或→:水平向左或向右滚动。q:退出 TUI 模式。
工具对比 #
除了 pyftrace 之外,还有其他出色的函数跟踪工具(包括 Python 内置的 Traceback)。
但是 pyftrace 也有它独特的优势:
| pyftrace | Traceback | py-spy | viztracer | |
|---|---|---|---|---|
| 实时跟踪 | O | X | O | O |
| TUI 模式 | O | X | X | X |
| 内置函数跟踪 | O | O | O | O |
|
执行报告 (调用次数、时长) |
O | X | X | O |
| 调用-返回层级结构 | O | O | X | O |
帮助 #
pyftrace 首次在 2024 年的 Pycon Korea 上发布,目前由
单人维护者 负责维护。
你的反馈对该项目的发展至关重要。
如果你有任何想法或建议,欢迎在
issue 中提出,或者至少给
pyftrace 一个 star,
这将给予我们极大的支持。
感谢你的阅读 :)