天天看點

[oeasy]python0007-調試程式_debug

調試程式 🥊

回憶上次内容

  • ​py​

    ​ 的程式是按照順序執行的
  • 是一行行挨排解釋執行的
  • 程式并不是數量越多越好
  • kpi也在不斷演化
[oeasy]python0007-調試程式_debug
  • 寫的代碼越多
  • 出現的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​​
  • 然後放到網上系統的剪貼闆上
[oeasy]python0007-調試程式_debug

嘗試調試

  • 粘貼到vim中
[oeasy]python0007-調試程式_debug
  • 原來是一把執行
  • 現在可以一步一步調試運作
pdb3 guido.py      
  • 使用

    pdb

    來進行調試
  • ​pdb​

    ​的意思是​

    ​p​

    ​ython's​

    ​d​

    ​e​

    ​b​

    ​ugger🤖
  • 為什麼要逐漸運作呢?

逐漸運作

  • 由于程式不知道哪裡出的問題
  • 是以一步步來執行
[oeasy]python0007-調試程式_debug
  • 一步步調試運作的目的是去除​

    ​bug​

  • 也就是​

    ​debug​

  • 可是為什麼把程式錯誤叫做​

    ​bug​

    ​ 🪰 呢?

help

  • 不知道怎麼辦的時候
  • 就要求助(help)
[oeasy]python0007-調試程式_debug
  • 他給了我很多的指令
  • 還說可以help 一下具體 topic
  • 檢視你哪個topic呢?

具體幫助

  • 檢視幫助的幫助
[oeasy]python0007-調試程式_debug
  • 沒有參數的話
  • 顯示所有指令
  • 有一個參數
  • 顯示這個參數的幫助
  • h(elp) 的縮寫是 h
  • elp可以省略
[oeasy]python0007-調試程式_debug
  • 這并不難 h h
  • 再看看其他單詞

list

  • l(ist)
  • 可以列出上下文11行的程式
  • 縮寫是l
[oeasy]python0007-調試程式_debug
  • 目前行前面有個箭頭 ->

使用指令

[oeasy]python0007-調試程式_debug
  • 确實可以看到上下文
  • ->代表着目前運作到了哪裡
  • 怎麼往下走呢?

next

  • n(ext)
  • 可以往前走一句
  • 縮寫是n
[oeasy]python0007-調試程式_debug
  • 試一下
[oeasy]python0007-調試程式_debug
  • 把1982年輸出了
  • 然後目前行來到了1995年
  • 如何判斷1995年在整個程式中的位置呢?

執行

  • l(ist)
  • 可以列出目前行的上下文
  • 在第2行
  • next就會到第3行
  • 當然也可以一路next下去

一路next

[oeasy]python0007-調試程式_debug
  • 我們一路next

完成調試

  • 一路​

    ​next​

    ​ 下去
  • python 解釋器
  • 就是這麼一步步地解釋執行的
[oeasy]python0007-調試程式_debug
  • 确實是順序執行的
  • 一行行挨排兒執行的
  • 我們就一步步地把bug找出來
  • 就像找兇手一樣!

最真實的解謎遊戲

  • debug是我見過最真實的解謎遊戲了
  • 比什麼劇本殺好玩多了
  • 一步步地分析
  • 找不到罪魁禍首的時候
[oeasy]python0007-調試程式_debug
  • 需要冷靜地分析
  • 找到罪魁禍首的時候
  • 那種快樂太真實了!!!!
  • 終于來到最後一行
  • 如果到這裡再next
  • 會發生什麼呢?

最後一步

  • 執行完最後一句之後
  • 就會傳回(return)到python
  • 然後傳回(return)到shell
[oeasy]python0007-調試程式_debug
  • 如果這個時候已經到了程式的盡頭
  • 再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