一个神级般的 Python 调试神器
贾浩楠 发自 凹非寺 , 量子位 报道
写代码时提笔千行,debug时却低效抓狂……
几乎每个编程者都逃不了这样的纠结。
通过编译器一行行地去找bug,太浪费时间。
所以,一位清华校友、谷歌工程师laike9m,便开发了一个强大的Python调试工具Cyberbrain:能够详细记录项目数据流、变量、状态等等关键信息。
并且,结果还会以直观简洁的可视化图片呈现。
有了这个神器,今后debug也会和写代码一样流畅高效。
“赛博大脑”帮你debug
平常你的程序中出现bug时会怎么办?
最常规的办法是用调试器,但是你能记住程序中每个步骤发生什么了吗?
这就是传统方法的缺点:调试信息无法持久化,要靠程序员去记住它们。
这款名叫Cyberbrain(赛博大脑)的强大的工具,最亮眼的功能,是回溯代码中的变量更改历史,查看程序执行的状态。
所以,在你调试程序或debug时,不需要费几个小时用编译器逐行执行。
Cyberbrain会清晰的告诉你流程中都发生过什么:
Cyberbrain能显示准确的数据流,并保留程序的每个状态。程序员不仅不需要记住任何内容,甚至不需要逐步执行程序,这可以节省大量调试时间。
比方说,你想找出为什么返回值是错误的。通过看图,就可以对导致返回值的原因有了一个大概的了解。
接下来,将鼠标悬停在 “返回 “节点上,所有相关的值都显示出来了,形成了一个从函数开始到结束的跟踪路径:
只要动动鼠标就能找到问题,谁还会去用麻烦的编译器呢?
除了流程和变量跟踪,赛博大脑还能对目标进行检查。
如果现在有一个大列表,但它无法与图匹配,如何使用工具来检查它的值?
启动后,Cyberbrain会自动打开一个devtools窗口。
当你把鼠标悬停在一个变量上时,它的值就会被记录在devtools控制台中。
所以在这种情况下,虽然没有足够的空间在跟踪图中显示整个列表,但你仍然可以从devtools中检查它的值。
几乎所有的Python调试器(PyCharm、VS Code等)都会截断参数,无法显示一个大列表中的每个元素,但Cyberbrain不会这样做,除非你明确告诉它。
最后,Cyberbrain还能让用户在debug的同时,设置循环计数器。
如何安装使用
Cyberbrain由一个Python库和各种编辑器/IDE集成组成。目前它支持 VS Code 和 Gitpod。
安装只需要通过一句话指令:
pip install Cyberbraincode —install-extension laike9m.Cyberbrain
同时,作者还提供了在线版的Cyberbrain,可以直接试用:
https://gitpod.io/#snapshot/91475a9d-4ccf-420a-b0ee-11db084ce689
在使用过程中,假如你想追踪一个函数“foo”,可以使用**@trace**指令实现:
from Cyberbrain import trace# As of now, you can only have one @trace decorator in the whole program.# We may change this in version 2.0, see https://github.com/laike9m/Cyberbrain/discussions/73@trace # Disable tracing with `@trace(disabled=True)`def foo():
Cyberbrain可以保持你的工作流程不变。运行一个程序(从 vscode 或命令行,都可以),一个新的面板将被打开,程序执行情况全部以可视化展示:
使用Cyberbrain,还有几点需要注意。
首先是可能会与其他调试器发生冲突。如果你设置了断点并使用VSC的调试器,Cyberbrain可能无法正常工作。一般来说,首选 “不调试运行”。
而当你的程序中有多个装饰器(decorator)时,应该将@trace设置为最底层的那个。
此外,目前Cyberbrain还不支持多线程代码。
作者介绍
作者laike9m,谷歌软件工程师,目前全职开发Cyberbrain工具。
laike9m是清华校友,在博客中自述曾担任清华大学推理协会会长。此外还是重度二次元爱好者。
除了Cyberbrain,他还组织了一档播客节目,名字叫捕蛇者说,Pythonhunter。
图片: https://uploader.shimo.im/f/Ks0rqxVvzEZrPsfE.png
Cyberbrain项目地址:https://github.com/laike9m/Cyberbrain
laike9m主页:https://laike9m.com/blog/
播客地址:https://pythonhunter.org/
推荐阅读
误执行了rm -fr /*之后,除了跑路还能怎么办?!
程序员必备58个网站汇总
大幅提高生产力:你需要了解的十大Jupyter Lab插件
一个神级般的 Python 调试神器相关推荐
- 清华校友打造Python调试神器
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 写代码 ...
- Debug无忧!清华校友打造Python调试神器:反向追踪变量、数据流等 | 开源
贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 写代码时提笔千行,debug时却低效抓狂-- 几乎每个编程者都逃不了这样的纠结. 通过编译器一行行地去找bug,太浪费时间. 所以,一位清 ...
- Debug无忧!清华校友打造Python调试神器
本文转载自 QbitAI,作者 贾浩楠 写代码时提笔千行,debug时却低效抓狂-- 几乎每个编程者都逃不了这样的纠结. 通过编译器一行行地去找bug,太浪费时间. 所以,一位清华校友.谷歌工程师la ...
- 谷歌工程师开源:Python 调试神器 Cyberbrain
点击上方蓝色小字,关注"涛哥聊Python" 重磅干货,第一时间送达 来源:Python猫 曾多次在<捕蛇者说>播客听到 laike9m 大佬分享他的 Cyberbra ...
- python手机版怎么用-QPython,一个在手机上运行Python的神器
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...
- qpython手机版-QPython,一个在手机上运行Python的神器
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...
- python调试神器_Python里三个最高逼格的调试神器
调试是开发过程中不可避免的一个环节,在Python中我们使用print.logging.assert等方法进行调试既简单又实用,但毕竟有其局限性.今天这篇文章为大家带来三个工具,其中有Python的内 ...
- python在线编辑器手机-QPython,一个在手机上运行Python的神器
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...
- python编辑器手机版-QPython,一个在手机上运行Python的神器
之前安利过一款手机上运行Python的神器Termux,不过Termux的使用比较重,它实际是一款linux系统模拟器,安装好Termux后还要再安装python,并且是全命令行操作,一些读者使用起来 ...
最新文章
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找
- java makefile jar包_java makefile学习实践(编译的javac命令写在makefile中,运行命令java写在shell脚本中)...
- java 解析ppt动画_姜子牙口碑崩盘?我们为它做了这份炸裂的PPT!(领取源文件)...
- vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
- 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
- openwrt x86 登录不上_求助,关于OpenWRT外接硬盘不识别的问题
- 未指定的IO标准导致vivado生成bit文件报错
- Linux集中日志服务器rsyslog(亲测)
- 51Nod 1509加长棒
- 前端面试宝典总结(一)(搬自牛客)
- python:tushare pro 股票每日行情
- python function terminated_〔求助〕一份12.3M的txt文档用calibre转换格式失败
- 成长计划校园极客秀|基于OpenHarmony的智能阳台
- 红牛分公司数据part02
- 3dMax教程网站 文字版
- 如何使用Erdas进行监督分类
- python实现日历功能_详解Python日历模块的使用
- NodeJS 文件操作 —— fs 基本使用
- python利用itchat接口和pyecharts包进行数据可视化
- SBM模型测算代码,matlab,可算 sbm,超效率sbm,非期望sbm,非期望超效率sbm
热门文章
- Python+Django+Nginx+Uwsgi 详细部署过程(爬坑过程,可以了解各个软件的执行流程,看过)
- gitlab图形化使用教程(测试过)
- 有用过PHP SPL的吗,不知道这主要用来干嘛
- redis类型[string 、list 、 set 、sorted set 、hash]
- TP的依赖注入:将类类型的对象作为参数注入到当前类中
- Linux的phpize
- eclipse jsp没有提示_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
- java中如何声明外键约束_java – 如何使用Hibernate注释标记外键约束...
- 解决ERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/m
- treemap 倒序_EXCEL按条件倒序提取,倒数第三次成绩?