谷歌大神又一開(kāi)源神器!代碼調(diào)試不選它選誰(shuí)?
如果調(diào)試是Debug的必經(jīng)之路,那么編程應(yīng)該將它考慮在內(nèi)。今天猿妹就和大家分享一個(gè)代碼調(diào)試神器——Cyberbrain。
Cyberbrain是一個(gè)免費(fèi)開(kāi)源的Python代碼調(diào)試解決方案,它可視化程序執(zhí)行以及每個(gè)變量的變化方式,讓程序員免受調(diào)試之苦。主要具有以下3個(gè)特性:
- 回溯變量更改
- 查看程序執(zhí)行的每個(gè)狀態(tài),包括變量的值
- 循環(huán)調(diào)試
Cyberbrain并不會(huì)改變你的工作流程,運(yùn)行一個(gè)程序(從 vscode 或命令行,都可以),一個(gè)新的面板將被打開(kāi),程序執(zhí)行情況全部以可視化展示。
Cyberbrain如何安裝
Cyberbrain由一個(gè)Python庫(kù)和各種編輯器/ IDE集成組成。當(dāng)前,它支持VS Code。要安裝Cyberbrain:
- pip install cyberbrain
- code --install-extension laike9m.cyberbrain
你也可以直接從VS Code上安裝。
如何使用
假設(shè)你想跟蹤一個(gè)函數(shù)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():
- ...
以下gif演示了工作流程:
使用Cyberbrain,可能有哪些意外
Cyberbrain可能與其他調(diào)試器發(fā)生沖突。如果設(shè)置斷點(diǎn)并使用VSC的調(diào)試器,則Cyberbrain可能無(wú)法正常運(yùn)行。
如果你打開(kāi)了多個(gè)VS Code窗口,則將始終在第一個(gè)窗口中創(chuàng)建跟蹤圖。
當(dāng)有多個(gè)裝飾器時(shí),應(yīng)將其@trace作為最里面的裝飾器。
- @app.route("/")
- @trace
- def hello_world():
- x = [1, 2, 3]
- return "Hello, World!"
賽博大腦——數(shù)據(jù)流分析和變量跟蹤
與其他調(diào)試器不同,Cyberbrain可以顯示準(zhǔn)確的數(shù)據(jù)流,并且可以在程序的每個(gè)狀態(tài)中持續(xù)存在。你不僅不需要記住任何事情,甚至你都不需要逐步執(zhí)行操作,這樣一來(lái)就可以節(jié)省大量調(diào)試時(shí)間。
下圖是使用Cyberbrain進(jìn)行調(diào)試的方法:
假如你想找出返回值錯(cuò)誤的原因。通過(guò)查看圖表,你已經(jīng)對(duì)導(dǎo)致返回值的原因有了一個(gè)大概的了解。
接下來(lái),將鼠標(biāo)懸停在“返回”節(jié)點(diǎn)上,所有相關(guān)值都會(huì)顯示出來(lái),形成從函數(shù)開(kāi)始到結(jié)束的跟蹤路徑:
只要?jiǎng)觿?dòng)鼠標(biāo)就能找到問(wèn)題,誰(shuí)還會(huì)去用編譯器呢?
目標(biāo)檢查
如果現(xiàn)在有一個(gè)大列表,但它無(wú)法與圖匹配,如何使用工具來(lái)檢查它的值?devtools可用于檢查值,如下所示。
啟動(dòng)后,Cyberbrain會(huì)自動(dòng)打開(kāi)devtools窗口。將鼠標(biāo)懸停在變量上時(shí),其值將記錄在devtools控制臺(tái)中。因此,在這種情況下,盡管沒(méi)有足夠的空間在跟蹤圖中顯示整個(gè)列表,但是您仍然可以從devtools中檢查其值。
幾乎所有的Python調(diào)試器(PyCharm,VS Code等)都會(huì)截取參數(shù),并且無(wú)法顯示大列表中的每個(gè)元素。但是我們相信“細(xì)節(jié)決定成敗”,每條信息可能都是有用的,不應(yīng)忽略。因此,除非你明確指示,Cyberbrain不會(huì)截取參數(shù)。
循環(huán)
Cyberbrain還有另一個(gè)獨(dú)特的功能,你可以在調(diào)試時(shí)設(shè)置循環(huán)計(jì)數(shù)器。
由于實(shí)現(xiàn)非常復(fù)雜,因此存在一些已知的錯(cuò)誤,不過(guò)隨著更新,應(yīng)該會(huì)變得更好。
目前,Cyberbrain已經(jīng)在Github上標(biāo)星1.5K,累計(jì)分支 64 個(gè)。(Github地址:https://github.com/laike9m/Cyberbrain)
最后,值得一提的是,創(chuàng)建者laike9m畢業(yè)于清華大學(xué),谷歌軟件工程師,目前全職開(kāi)發(fā)Cyberbrain工具。































