<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          谷歌工程師開源:Python 調(diào)試神器 Cyberbrain

          共 2363字,需瀏覽 5分鐘

           ·

          2021-03-18 22:21

          ?? Python貓” ,一個值得加星標(biāo)的公眾號

          花下貓語:曾多次在《捕蛇者說》播客聽到 laike9m 大佬分享他的 Cyberbrain 項目,前不久,還看到他寫了一篇英文的《Let's Rethink Debugging》(他上 PyCascades 2021 作了分享)。今天又恰巧看到一篇文章介紹了這個項目,特分享給大家。

          劇照:旺達(dá)幻視
          來源:量子位

          寫代碼時提筆千行,debug時卻低效抓狂……

          幾乎每個編程者都逃不了這樣的糾結(jié)。

          通過編譯器一行行地去找bug,太浪費時間。

          所以,一位清華校友、谷歌工程師laike9m,便開發(fā)了一個強(qiáng)大的Python調(diào)試工具Cyberbrain

          能夠詳細(xì)記錄項目數(shù)據(jù)流、變量、狀態(tài)等等關(guān)鍵信息。

          并且,結(jié)果還會以直觀簡潔的可視化圖片呈現(xiàn)。

          有了這個神器,今后debug也會和寫代碼一樣流暢高效。

          “賽博大腦”幫你debug

          平常你的程序中出現(xiàn)bug時會怎么辦?

          最常規(guī)的辦法是用調(diào)試器,但是你能記住程序中每個步驟發(fā)生什么了嗎?

          這就是傳統(tǒng)方法的缺點:調(diào)試信息無法持久化,要靠程序員去記住它們。

          這款名叫Cyberbrain(賽博大腦)的強(qiáng)大的工具,最亮眼的功能,是回溯代碼中的變量更改歷史,查看程序執(zhí)行的狀態(tài)。

          所以,在你調(diào)試程序或debug時,不需要費幾個小時用編譯器逐行執(zhí)行。

          Cyberbrain會清晰的告訴你流程中都發(fā)生過什么

          Cyberbrain能顯示準(zhǔn)確的數(shù)據(jù)流,并保留程序的每個狀態(tài)。程序員不僅不需要記住任何內(nèi)容,甚至不需要逐步執(zhí)行程序,這可以節(jié)省大量調(diào)試時間。

          比方說,你想找出為什么返回值是錯誤的。通過看圖,就可以對導(dǎo)致返回值的原因有了一個大概的了解。

          接下來,將鼠標(biāo)懸停在 “返回 “節(jié)點上,所有相關(guān)的值都顯示出來了,形成了一個從函數(shù)開始到結(jié)束的跟蹤路徑:

          只要動動鼠標(biāo)就能找到問題,誰還會去用麻煩的編譯器呢?

          除了流程和變量跟蹤,賽博大腦還能對目標(biāo)進(jìn)行檢查。

          如果現(xiàn)在有一個大列表,但它無法與圖匹配,如何使用工具來檢查它的值?

          啟動后,Cyberbrain會自動打開一個devtools窗口。

          當(dāng)你把鼠標(biāo)懸停在一個變量上時,它的值就會被記錄在devtools控制臺中。

          所以在這種情況下,雖然沒有足夠的空間在跟蹤圖中顯示整個列表,但你仍然可以從devtools中檢查它的值。

          幾乎所有的Python調(diào)試器(PyCharm、VS Code等)都會截斷參數(shù),無法顯示一個大列表中的每個元素,但Cyberbrain不會這樣做,除非你明確告訴它。

          最后,Cyberbrain還能讓用戶在debug的同時,設(shè)置循環(huán)計數(shù)器。

          ?如何安裝使用

          Cyberbrain由一個Python庫和各種編輯器/IDE集成組成。目前它支持 VS Code 和 Gitpod。

          安裝只需要通過一句話指令:

          pip install Cyberbraincode —install-extension laike9m.Cyberbrain

          同時,作者還提供了在線版的Cyberbrain,可以直接試用:

          https://gitpod.io/#snapshot/91475a9d-4ccf-420a-b0ee-11db084ce689

          在使用過程中,假如你想追蹤一個函數(shù)“foo”,可以使用@trace指令實現(xiàn):

          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可以保持你的工作流程不變。運(yùn)行一個程序(從 vscode 或命令行,都可以),一個新的面板將被打開,程序執(zhí)行情況全部以可視化展示:

          使用Cyberbrain,還有幾點需要注意。

          首先是可能會與其他調(diào)試器發(fā)生沖突。如果你設(shè)置了斷點并使用VSC的調(diào)試器,Cyberbrain可能無法正常工作。一般來說,首選 “不調(diào)試運(yùn)行”。

          而當(dāng)你的程序中有多個裝飾器(decorator)時,應(yīng)該將@trace設(shè)置為最底層的那個。

          此外,目前Cyberbrain還不支持多線程代碼。

          作者介紹

          作者laike9m,谷歌軟件工程師,目前全職開發(fā)Cyberbrain工具。

          laike9m是清華校友,在博客中自述曾擔(dān)任清華大學(xué)推理協(xié)會會長。此外還是重度二次元愛好者。

          除了Cyberbrain,他還組織了一檔播客節(jié)目,名字叫捕蛇者說,Pythonhunter。

          Cyberbrain項目地址:
          https://github.com/laike9m/Cyberbrain

          laike9m主頁:
          https://laike9m.com/blog/

          播客地址:
          https://pythonhunter.org/

          優(yōu)質(zhì)文章,推薦閱讀:

          Google 內(nèi)部的 Python 代碼風(fēng)格指南

          Flask 作者 Armin Ronacher:我不覺得有異步壓力

          如何在 Python 里面精確四舍五入?

          如何用 Python 玩轉(zhuǎn) Redis ?

          Python 中 -m 的典型用法、原理解析與發(fā)展演變

          感謝創(chuàng)作者的好文
          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亲子乱婬A片日韩精品一区 | 日韩婬乱片A片AAA真人视频 | 日韩A片免费在线观看 | 亚洲综合婷婷深深 | 乱伦视频大杂烩 |