VizTracer 0.6.0, 终极杀器vdb来了

之前一个随手做的wthell引起了不错的反响,我忽然意识到,如果把wthell和VizTracer放到一起会是什么效果呢?

于是伴随着0.6.0版本的最重要feature——vdb出场了。

vdb和pdb的概念非常类似,这里的v既是指VizTracer,也是指virtual。vdb是一个虚拟debugger,之所以说它是虚拟的,因为它debug的并不是一个正在运行的程序,而是一个已经完成的程序。vdb可以debug——VizTracer产生的report!

是的,当你用VizTracer跑出来一个json report之后,可以用

vdb your_report.json

来进入debugger模式。在这个模式里,你可以像在真实的debugger里一样,进出函数,但是更加酷炫的是,你可以把程序往回跑!

是的,因为VizTracer记录了所有的FEE数据,vdb除了支持常见的s(tep), n(ext)功能之外,还支持了两个pdb完全不可能实现的功能——sb, nb。嗯,名字很好听吧,这里的b是back的意思。也就是说,除了往前一步,你还可以往后一步。你可以在你的程序里自由行动,不用担心哪个step over就把重要的地方跳过去又得重来。

和pdb很像的界面,但是直接显示函数主体
输入nb之后,跳回上个函数

当然了,vdb是不知道local和global的数据的,只有函数的进出情况。所以在vdb里你能看到的只有程序运行的路线,没有具体的数值。

但是vdb的数据源是VizTracer,理论上说我可以增加任何数据,甚至把它变成一个完整的可进退的debugger,但是那样占用的资源就是个天文数字了(memory,disk,overhead)。所以我会考虑找一个折衷的手段,让用户自己控制记录一部分数据,然后可以在vdb里读到。

vdb还有一个其他debugger不可能实现的功能,就是——跳到某个时间点。因为vdb已经知道了所有数据,所以你可以用

t <timestamp>

来跳到你需要的时间点,然后前后看看函数运行的怎么样。

目前为止,vdb支持了pdb支持的s(tep), n(ext), r(eturn), u(p), d(own), w(here)。还有专属于vdb的sb(step back), nb(next back), t(imestamp)。这只是alpha版本,其实算个proof of concept。未来的路还长着呢!

说了这么多vdb,也得说一下从0.5.0到0.6.0有关VizTracer的其他更新啦!

  • 增加了add_functionarg,现在可以在function上随意加数据了
注意Args里的input,是在运行的时候加的
  • 增加了logging的匹配。现在可以通过给python的logging加一个handler,直接把logging的内容给导到VizTracer里来
这是一个instant event,记录了logging.warning(&amp;quot;test&amp;quot;)
  • 在运行程序的时候会找一下PATH,这样就可以在跑类似flask run这种command的时候直接用viztracer了:viztracer flask run

说到这个,大家看我前两天发的宣传视频了么:

知乎视频www.zhihu.com图标

为了搞定flask,我特意修复了一下PATH的问题。

还有一些零碎的修复和优化就不说了,大家也懒得听~

本来之前觉得想做的东西做的差不多了,现在vdb出现了,立刻又有了一大片空白。

对了,新增加了

pip install viztracer[full] 

会装上rich和orjson,让viztracer更优秀一些。当然如果你不需要,直接install viztracer就是纯净版。

最后还是希望大家可以试用VizTracer以及提出宝贵意见哈!谢谢大家!

gaogaotiantian/viztracergithub.com图标

发布于 09-06

文章被以下专栏收录