本来只想小范围宣传一下,但没什么人给我反馈,所以就来 V2 贴一下。
项目地址
https://github.com/laike9m/Cyberbrain
简单来说,Cyberbrain 可以实现精确的变量溯源,并且让用户查看变量在任意时刻的值。这些传统的 debugger 都做不到。
截图:
你觉得这个工具有用吗,还缺哪些功能?欢迎任何问题和反馈。
![]() | 1 janxin 2020-10-09 10:03:00 +08:00 新工具终于发布了呀,试一试 |
![]() | 2 treblex 2020-10-09 10:06:59 +08:00 优秀 |
![]() | 4 frostming 2020-10-09 10:10:28 +08:00 左老师牛皮 |
![]() | 5 676529483 2020-10-09 10:11:13 +08:00 pycon 上了解的,终于能用了吗?可惜现在写 go 了(doge) |
![]() | 6 arcadia 2020-10-09 10:11:40 +08:00 ![]() 试用一下看看哈 |
![]() | 7 wzw 2020-10-09 10:22:10 +08:00 via iPhone 现在用 go 多点了,这个 py 应该很实用 |
8 CallMeReznov 2020-10-09 10:42:14 +08:00 国内的镜像还没更新到吗? |
9 SD10 2020-10-09 10:42:17 +08:00 via iPhone 牛 |
10 laike9m OP @CallMeReznov #8 应该都有的。你用的哪个镜像? |
![]() | 12 pidal20 2020-10-09 11:50:55 +08:00 via iPhone 看示意图好像是用 github-codespaces 开发的? |
13 laike9m OP @liguanye7 #12 我申请了 codespaces 但还没给我批。之后会支持。目前支持 VS Code 和 Gitpod |
![]() | 14 est 2020-10-09 12:07:56 +08:00 ![]() 这类 trace 工具让我很困惑的一点就是几亿次循环那种变量变化特别快的,然后又是 2G 的 json 在里面变来变去的怎么办。 |
15 laike9m OP @est #14 这确实是个问题,不过我有大致的解决思路,就是隔一段时间把数据 dump 到磁盘一次。目前还没有着手优化这一块,不过是在计划内的。 |
![]() | 16 wuwukai007 2020-10-09 12:17:35 +08:00 via Android 感觉和 pysnooper 功能差不多呀 |
17 laike9m OP @wuwukai007 我不喜欢自吹,但是 cyberbrain 完爆 snooper (虽然目前还不支持追踪深层的函数调用)。pysnooper 真的没什么技术含量,它的核心功能我两天就能写出来 |
18 laike9m OP @wuwukai007 pysnooper 只能告诉你 a 变了,但它不能告诉你 a 变化的来源,以及变化来源的来源,而这是 cyberbrain 的核心功能。 |
![]() | 19 wuwukai007 2020-10-09 12:37:47 +08:00 via Android @laike9m 追踪来源有点意思,那确实跟 pysnooper 侧重点不一样了 |
![]() | 20 wdhwg001 2020-10-09 12:41:09 +08:00 via iPhone async 的支持怎么样? |
21 jin7 2020-10-09 12:51:07 +08:00 先收藏一下 |
22 laike9m OP @wdhwg001 在项目页面有后续版本的路线图,预计会在 4.0 支持。当然,我更希望有人能加入一起做,如果是我一个人的话 async 确实要等比较久了 |
23 laike9m OP @wuwukai007 恩,因为 pysnooper 分析的是行级别的变化,而 cb 是在字节码级别做追踪的,拿到的信息要多太多,准确度也更高 |
![]() | 24 justin2018 2020-10-09 13:05:22 +08:00 颜值不错 收藏了 |
25 CallMeReznov 2020-10-09 13:08:00 +08:00 @laike9m #10 阿里的 早上发帖子的时候 pip 了一下没有 |
26 laike9m OP |
27 zhuzhzh 2020-10-09 13:33:39 +08:00 很不错,下一版开发 go trace? |
28 laike9m OP @zhuzhzh #27 谢谢。Cyberbrain 是 Python only 的,Go 可能需要更熟悉 Go 的人来开发,而且我怀疑在 Go 里能否拿到需要的信息 |
29 CallMeReznov 2020-10-09 13:54:26 +08:00 @laike9m #26 怪我。。。我 py 版本 367 的。 |
30 laike9m OP @CallMeReznov #29 嗯,支持 Python 3.7+(过几天就支持 3.9 )。主要是因为用了一个 3.7 里新加的 API |
31 xiaolinjia 2020-10-09 13:57:35 +08:00 mark 一手,顺便能请问下是用了什么新特性导致只能 3.7+才能用吗,我也跟 ls 一样是 36 的。 |
![]() | 33 xiri 2020-10-09 14:11:07 +08:00 ![]() 是不是不支持递归函数啊,刚刚随手拿裴波那契数列的递归写法试了一下,结果报 AssertionError 了,又试了几个其他的递归函数,无一例外全部报错。 正常写法的函数都没问题,应该不是我的环境的原因吧 |
34 laike9m OP |
35 laike9m OP @xiaolinjia #31 https://docs.python.org/3.9/library/sys.html#sys.settrace 里的 `opcode` 事件 |
![]() | 36 no1xsyzy 2020-10-09 14:31:57 +08:00 @xiri 我来拍脑袋猜一下,一个被 @ trace 修饰的函数在被调用的过程中不允许再次调用被修饰的函数。 试下先正常 def fib(n): 出来,然后 trace(fib)(n) 来执行?可能可以。 |
![]() | 37 SimonOne 2020-10-09 14:34:14 +08:00 我不太懂这些,不过这个变量可视化的部分和 https://marketplace.visualstudio.com/items?itemName=hediet.debug-visualizer 有什么差别吗 |
39 laike9m OP |
40 laike9m OP ![]() @SimonOne #37 哈哈,它们长得像是因为都用了 vis-network 这个可视化库 不过目的是完全不一样的。debug-visulizer 是可视化数据结构,Cyberbrain 是可视化代码执行流程 |
![]() | 41 ruanimal 2020-10-09 15:46:37 +08:00 挺感兴趣的,有设计文档吗 |
42 laike9m OP @ruanimal 这一版没有。。可以加一下 discord 我语音给你讲,链接在 readme 最底部 |
43 xuzheliang 2020-10-09 16:02:36 +08:00 看到不支持 pycharm 心凉了一半.... 不过好东西,支持! |
44 laike9m OP @xuzheliang 个人精力毕竟有限,只能依靠社区了。如果有人想开发 pycharm 我会尽力提供各种帮助 |
45 laike9m OP @xuzheliang 其实我平时也都是用 pycharm 的。。但是没办法谁叫 Web 前端好实现呢 |
![]() | 46 ahonn 2020-10-09 19:32:34 +08:00 ![]() 看起来很棒,可惜不写 Python 。如果 Javascript 也能有类似的东西就好了.. |
![]() | 48 CismonX 2020-10-09 20:15:00 +08:00 ![]() 好东西。。看的我都想做一个 PHP 的同类工具了 |
![]() | 50 zckevin 2020-10-09 21:50:15 +08:00 Time travel 吗? |
![]() | 52 abersheeran 2020-10-09 22:11:34 +08:00 ![]() 这个调试器厉害了啊,变化来源追踪。star 送上~ |
![]() | 53 DJI360 2020-10-09 23:16:35 +08:00 虽然最近写的少了,但是还是挺需要的,之前在 pycharm 挨个看,先 star |
![]() | 54 mwVYYA6 2020-10-09 23:44:58 +08:00 via Android 看起来有点意思 |
![]() | 57 beastk 2020-10-10 00:47:36 +08:00 via iPhone 牛逼,支持 2.7.x 不 |
![]() | 59 9LCRwvU14033RHJo 2020-10-10 08:14:33 +08:00 很有意思的项目 |
60 rapiz 2020-10-10 09:33:27 +08:00 很有趣,帮顶支持一下 |
![]() | 61 Felldeadbird 2020-10-10 09:52:23 +08:00 6 !将 debug 的变量 GUI 化。 不知道对大项目支持度怎么样。 |
62 laike9m OP @Felldeadbird 目前因为只能追踪一个函数,所以还好,毕竟一个函数不会特别大。未来的版本会支持追踪函数中每个函数的调用,这时候可能就需要针对大项目进行优化。 |
![]() | 63 vegetableChick 2020-11-17 18:12:45 +08:00 支持一下 |