VizTracer 是一款功能强大的工具,它能以极低的性能开销对 Python 代码进行追踪和可视化,帮助开发者深入理解程序执行过程,快速定位并解决代码中的问题。同时,对分析和理解源代码也非常有益。
核心功能
• 时间轴可视化: 以时间轴的形式展示每个函数的调用过程,包括函数进入、退出时间以及源码。
• 多线程支持: 无需修改代码即可追踪多线程程序的执行过程,并直观地展现线程之间的交互关系。
• 多进程支持: 支持 Subprocess、Multiprocessing、os.fork()、concurrent.futures 和 Loky 等多进程场景。
• 异步支持: 支持 asyncio 异步编程,并提供选项增强异步代码的追踪效果。
• 火焰图生成: 可以生成火焰图,帮助快速识别代码中的性能瓶颈。
• 远程调试: 支持远程连接到任意 Python 进程进行追踪和调试。
• 灵活的过滤功能: 可以根据函数名、文件路径、执行时间等条件对追踪数据进行过滤,降低内存占用并提高追踪效率。
• 自定义事件记录: 允许用户在代码中添加自定义事件,以便更精准地分析程序行为。
使用场景
• 调试代码: 通过追踪代码执行过程,快速定位并解决程序中的 bug。
• 性能分析: 分析程序的性能瓶颈,并针对性地进行优化。
• 理解复杂程序: 理解程序的运行机制,特别是涉及多线程、多进程或异步操作的代码。
安装与使用
VizTracer 的安装非常简单,可以使用 pip 命令进行安装:
pip install viztracer
命令行使用
假设要追踪 my_script.py
文件,可以使用以下命令:
viztracer my_script.py arg1 arg2
该命令将会生成一个名为 result.json
的追踪文件,可以使用 vizviewer
命令打开该文件:
vizviewer result.json
vizviewer
可以展示追踪数据,并提供各种交互功能,例如放大、缩小、移动等。
代码中使用
也可以在 Python 代码中直接使用 VizTracer:
from viztracer import VizTracer
tracer = VizTracer()
tracer.start()
# 要追踪的代码
# ...
tracer.stop()
tracer.save()
还可以使用 with
语句简化代码:
with VizTracer(output_file="optional.json") as tracer:
# 要追踪的代码
# ...
火焰图
VizTracer 可以生成火焰图,帮助用户直观地识别代码中的性能瓶颈:
vizviewer --flamegraph result.json
其他特性
• 性能优化: VizTracer 的性能开销非常低,在最坏情况下也不会超过 2-3 倍。
• 可扩展性: VizTracer 提供了多种扩展接口,方便用户根据自己的需求进行定制。
总结
VizTracer 是一款功能强大、使用方便、性能优异的 Python 代码可视化调试工具,它可以帮助开发者深入理解程序执行过程,快速定位并解决代码中的问题,提升开发效率。
项目地址: https://github.com/gaogaotiantian/viztracer