python调试工具Birdseye的使用教程
作者:Ckend 发布时间:2023-08-22 19:18:48
Birdseye是一个Python调试器,它在函数调用中记录表达式的值,并让你在函数退出后轻松查看它们,例如:
无论你如何运行或编辑代码,都可以使用Birdseye。只需要你安装好依赖:
pip install birdseye
并在代码函数上方添加 @eye 装饰器(如上动图所示),即可根据需要运行函数,并在浏览器中查看结果。
它还可以与一些常用工具集成在一起,如 Pycharm 和 Vscode,以提供更流畅的体验,后续我们会介绍如何将其与这些工具结合使用。
它不仅仅能够单步执行,还能在循环迭代中来回移动,并查看所选表达式的值如何变化:
通过 birdseye 你能很容易地知道哪些表达式引发了异常:
你也能够展开具体的数据结构和对象以查看其内容:
调用会按功能组织(文件组织)并进行时间排序进行显示,让你一目了然地看到发生了什么:
1.快速上手
首先,使用 pip 安装 birdseye :
pip install birdseye
然后,对需要进行调试的函数使用eye装饰器:
from birdseye import eye
@eye
def foo():
在你调用该函数完成后,在终端运行命令打开Birdseye的Web服务:
python -m birdseye
在浏览器打开 http://localhost:7777 就能看到需要调试的函数执行流程了。点击下图的按钮即可跳转到最新的函数调用。
2.在Pycharm中集成调试
在 Pycharm 的 Settings 中,点击 Plugins 插件市场搜索 birdseye 点击 install 安装。
安装完成后重启Pycharm,就可以在 Pycharm 中使用 birdseye了:
默认情况下,该插件还可以为你自动运行Birdseye服务器,因此就不需要输入 python -m birdseye 那行命令了。
3.在VSCode中集成调试
在VSCode中继承调试Birdseye也非常方便,点击左侧的扩展商店,在弹出框中输入搜索 birdseye,并点击 install 安装:
安装完成后,点击 F1 输入Birdseye,就能显示调试界面:
如果无法正常显示右侧调试界面,并提示未安 * irdseye,但实际上你已经安装成功了,这一般是路径错误导致的,请在扩展设置中手动更改python路径为你安装了Birdseye的Python。
4.美中不足
Birdseye 是一个非常强大的调试工具,但我认为这还是有缺点可以改善的:
1.为了防止堆栈过大,每个迭代它最多只保留6个(前三、末三)元素:
因此如果你想看一些特殊元素值的执行情况,它可能不会如你所愿。
不过,不需要担心某些分支你调试不到,因为 birdseye 有个保险机制:如果一个表达式仅在某种特定情况下会被执行,那么执行时的元素也会被加入到可调试元素中。
2.由于需要记录堆栈,程序会大大减慢速度,因此它绝对不适合上到生产环境。
3.每个函数调用,Birdseye 都需要收集许多数据,对于某些极其复杂的函数调用,可能会引发内存问题。
如果你不担心这三个缺点,而且希望能快速方便地看到函数中不同分支的执行情况,那么Birdseye就是你的不二之选。
来源:https://mp.weixin.qq.com/s/thYPCkBio9HRq8KzdG3Ymg
猜你喜欢
- goland leetcode 插件安装可以提高刷题效率,对于学习算法的同学是个不错的选择安装使用步骤:安装插件:a. 左上角Goland
- 前言Python中的 True和 False总是让人困惑,一不小心就会用错,本文总结了三个易错点,分别是逻辑取反、if条件式和pandas.
- 于是写测试程序。。。不行 下载最新的ODBC。。。还是不行 通过sql plus查询。。。咦?竟然也查不到。。。 于是,折腾。。。折腾。。。
- 1.lxml库简介lxml 是 Python 常用的文档解析库,能够高效地解析 HTML/XML 文档,常用于 Python 爬虫。lxml
- close方法可以释放一个连接的资源,但是不是立即释放,如果想立即释放,那么在close之前使用shutdown方法shut_rd() --
- 最近刚换工作不久,没太多的时间去整理工作中的东西,大部分时间都在用来熟悉新公司的业务,熟悉他们的代码框架了,最主要的是还有很多新东西要学,我
- 为某国税局开发一综合 * ,需要建立一个庞大的国税系统通讯录数据库,从各省、市到每名具体工作人员,项目较多,该如何设计各表呢?数据库的表设计
- <% dim week_ymd(8) '测出可以手动设定日期,比如this_ymd=#2008-04-1
- 本文实例讲述了Python设计模式之建造者模式。分享给大家供大家参考,具体如下:建造者模式(Builder Pattern):将一个复杂对象
- 系统管理员通常从svn/git中检索代码,部署站点后通常首先会生成该站点所有文件的MD5值,如果上线后网站页面内容被篡改(如挂马)等,可以比
- 下面这段代码是兼容IE的图片切换代码,请问各位老鸟如何兼容FF,或者有相类似无按钮无数字兼容FF的图片切换代码?<!DOCTYPE h
- 最近了解了下repaint和reflow的相关知识,觉得在页面重构过程中就应该考虑前端开发(js)人员对dom进行操作,能够减轻客户浏览器的
- 关于python 性能提升的一些方案。一、函数调用优化(空间跨度,避免访问内存) 程序的优化核心点在于尽量减少操作跨度,包括代码执
- 一、sh是什么SH是一个独特的子进程包装器,可将您的系统程序动态映射到Python函数。SH帮助您用Python编写Shell脚本,既能支持
- 如提取第1行,第2列的值:df.iloc[[0],[1]]则会返回一个df,即有字段名和行号。如果用values属性取值:df.iloc[[
- Python实现12306火车票抢票系统效果图如下所示:具体代码如下所示:import urllib.request as request
- Installing mysql (2.8.1) with native extensions /usr/local/lib/ruby/si
- 模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等复习一下基本的正则表达式吧 .:匹配除了换行符以为的任意单个字符&nbs
- 阅读上一篇:打造设计你自己的字体 Ⅱ永远都在寻觅字体设计的灵感。夏天过后,我买了一套便宜的书法钢笔,说服自己,它会让我的鸡爬字产生脱胎换骨的
- 非常简单的函数,但是官网的介绍令人(令我)迷惑,所以稍加解释。 mask_select会将满足mask(掩码、遮罩等等,随便翻译)的指示,将