調試程式 🥊
回憶上次内容
-
的程式是按照順序執行的py
- 是一行行挨排解釋執行的
- 程式并不是數量越多越好
- kpi也在不斷演化
- 寫的代碼越多
- 出現的bug就越多
- 什麼是bug
- 如何找bug呢?
嘗試調試
- 那 python 程式到底是怎麼一步步解釋執行的呢?🤔
print("1982------Guido in cwi")
print("1995------Guido in cnri")
print("2000------Guido in beopen")
print("2005------Guido in google")
print("2012------Guido in dropbox")
print("2020------Guido in microsoft")
- 首先要有這個guido.py
- 然後放到網上系統的剪貼闆上
嘗試調試
- 粘貼到vim中
- 原來是一把執行
- 現在可以一步一步調試運作
pdb3 guido.py
- 使用
來進行調試pdb
-
的意思是pdb
ython'sp
ed
ugger🤖b
- 為什麼要逐漸運作呢?
逐漸運作
- 由于程式不知道哪裡出的問題
- 是以一步步來執行
- 一步步調試運作的目的是去除
bug
- 也就是
debug
- 可是為什麼把程式錯誤叫做
🪰 呢?bug
help
- 不知道怎麼辦的時候
- 就要求助(help)
- 他給了我很多的指令
- 還說可以help 一下具體 topic
- 檢視你哪個topic呢?
具體幫助
- 檢視幫助的幫助
- 沒有參數的話
- 顯示所有指令
- 有一個參數
- 顯示這個參數的幫助
- h(elp) 的縮寫是 h
- elp可以省略
- 這并不難 h h
- 再看看其他單詞
list
- l(ist)
- 可以列出上下文11行的程式
- 縮寫是l
- 目前行前面有個箭頭 ->
使用指令
- 确實可以看到上下文
- ->代表着目前運作到了哪裡
- 怎麼往下走呢?
next
- n(ext)
- 可以往前走一句
- 縮寫是n
- 試一下
- 把1982年輸出了
- 然後目前行來到了1995年
- 如何判斷1995年在整個程式中的位置呢?
執行
- l(ist)
- 可以列出目前行的上下文
- 在第2行
- next就會到第3行
- 當然也可以一路next下去
一路next
- 我們一路next
完成調試
- 一路
下去next
- python 解釋器
- 就是這麼一步步地解釋執行的
- 确實是順序執行的
- 一行行挨排兒執行的
- 我們就一步步地把bug找出來
- 就像找兇手一樣!
最真實的解謎遊戲
- debug是我見過最真實的解謎遊戲了
- 比什麼劇本殺好玩多了
- 一步步地分析
- 找不到罪魁禍首的時候
- 需要冷靜地分析
- 找到罪魁禍首的時候
- 那種快樂太真實了!!!!
- 終于來到最後一行
- 如果到這裡再next
- 會發生什麼呢?
最後一步
- 執行完最後一句之後
- 就會傳回(return)到python
- 然後傳回(return)到shell
- 如果這個時候已經到了程式的盡頭
- 再next會發生什麼呢?
繞圈
- 到頭了就又重來
- 就會重新執行這個檔案
- 就圜道了
- 可是這個和蟲子(bug)有什麼關系呢?
第一個錯誤 bug
- 曆史上第一個程式錯誤是
- 這隻蟲子
🪰bug
- 飛進繼電器(relay)計算機(computer)裡面來
- 導緻當時的繼電器短路
- 是以後來
- 管錯誤叫做bug
- 管調試程式錯誤叫做
debug
總結
-
檔案的程式是按照順序py
- 一行行挨排解釋執行的
- 我們可以
來對程式調試pdb3 hello.py
- 順序執行
- 程式在文本中從上到下是一行行寫的
- 解釋器是從上到下是一行行解釋的
- 調試也是從頭到尾一行行執行的
- 但是這一行行的是在有點慢啊
- 畢竟我們都是經曆過萬行代碼的人了
- 那得按10000次的n才能執行完啊?
- 有快點的方法嗎?🤔
- 我們下次再說!👋
- 藍橋->https://www.lanqiao.cn/teacher/workbench/courses/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython
- 視訊->https://www.bilibili.com/video/BV1CU4y1Z7gQ