调试程序 🥊
回忆上次内容
- 是一行行挨排解释执行的
- 程序并不是数量越多越好
- kpi也在不断演化
![图片描述 [oeasy]python0009 - 设置断点_break_point_python](https://file.cfanz.cn/uploads/png/2022/10/15/3/dYVd4dYbOf.png)
尝试调试
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]python0009 - 设置断点_break_point_设置断点_02](https://file.cfanz.cn/uploads/jpeg/2022/10/19/5/cXA65C2eA9.jpeg)
尝试调试
![图片描述 [oeasy]python0009 - 设置断点_break_point_python_03](https://file.cfanz.cn/uploads/png/2022/10/19/5/975faB13ff.png)
pdb3 guido.py
-
pdb
的意思是p
ython'sd
eb
ugger🤖
逐步运行
![图片描述 [oeasy]python0009 - 设置断点_break_point_breakpoint_04](https://file.cfanz.cn/uploads/png/2022/10/19/5/FW3FYde569.png)
help
![图片描述 [oeasy]python0009 - 设置断点_break_point_调试程序_05](https://file.cfanz.cn/uploads/png/2022/10/19/5/J86VXa6PeR.png)
- 他给了我很多的命令
- 还说可以help 一下具体 topic
- 查看你哪个topic呢?
具体帮助
![图片描述 [oeasy]python0009 - 设置断点_break_point_breakpoint_06](https://file.cfanz.cn/uploads/png/2022/10/19/5/U5261IWe2e.png)
![图片描述 [oeasy]python0009 - 设置断点_break_point_python_07](https://file.cfanz.cn/uploads/png/2022/10/19/5/9c1Md6VW30.png)
list
![图片描述 [oeasy]python0009 - 设置断点_break_point_设置断点_08](https://file.cfanz.cn/uploads/jpeg/2022/10/19/5/619ca7Ta52.jpeg)
使用命令
![图片描述 [oeasy]python0009 - 设置断点_break_point_调试程序_09](https://file.cfanz.cn/uploads/png/2022/10/19/5/MO249X4Q1L.png)
- 确实可以看到上下文
- ->代表着当前运行到了哪里
- 怎么往下走呢?
next
![图片描述 [oeasy]python0009 - 设置断点_break_point_breakpoint_10](https://file.cfanz.cn/uploads/jpeg/2022/10/19/5/f8fefR1231.jpeg)
![图片描述 [oeasy]python0009 - 设置断点_break_point_debug_11](https://file.cfanz.cn/uploads/png/2022/10/19/5/8aK26Gd5I5.png)
- 把1982年输出了
- 然后当前行来到了1995年
- 如何判断1995年在整个程序中的位置呢?
执行
![图片描述 [oeasy]python0009 - 设置断点_break_point_breakpoint_12](https://file.cfanz.cn/uploads/png/2022/10/19/5/6881ID44Q2.png)
一路next
![图片描述 [oeasy]python0009 - 设置断点_break_point_python_13](https://file.cfanz.cn/uploads/png/2022/10/19/5/Kc188661QF.png)
完成调试
- 一路
next
下去 - python 解释器
- 就是这么一步步地解释执行的
![图片描述 [oeasy]python0009 - 设置断点_break_point_debug_14](https://file.cfanz.cn/uploads/png/2022/02/07/1/a346Td9dN4.png)
- 确实是顺序执行的
- 一行行挨排儿执行的
- 我们就一步步地把bug找出来
- 就像找凶手一样!
最真实的解谜游戏
- debug是我见过最真实的解谜游戏了
- 比什么剧本杀好玩多了
- 一步步地分析
- 找不到罪魁祸首的时候
![图片描述 [oeasy]python0009 - 设置断点_break_point_设置断点_15](https://file.cfanz.cn/uploads/png/2022/10/19/5/R8a55U401A.png)
- 需要冷静地分析
- 找到罪魁祸首的时候
- 那种快乐太真实了!!!!
- 终于来到最后一行
- 如果到这里再next
- 会发生什么呢?
最后一步
- 就会返回(return)到python
- 然后返回(return)到shell
![图片描述 [oeasy]python0009 - 设置断点_break_point_python_16](https://file.cfanz.cn/uploads/jpeg/2022/10/19/5/52LFdE55dA.jpeg)
- 如果这个时候已经到了程序的尽头
- 再next会发生什么呢?
绕圈
![图片描述 [oeasy]python0009 - 设置断点_break_point_debug_17](https://file.cfanz.cn/uploads/png/2022/10/19/5/R5Ib8LL854.png)
第一个错误 bug
![图片描述 [oeasy]python0009 - 设置断点_break_point_debug_18](https://file.cfanz.cn/uploads/png/2022/02/07/1/710YfbRa00.png)
- 这只虫子
bug
🪰 - 飞进继电器(relay)计算机(computer)里面来
- 导致当时的继电器短路
- 管错误叫做bug
- 管调试程序错误叫做
debug
总结
- 一行行挨排解释执行的
- 我们可以
pdb3 hello.py
来对程序调试
- 程序在文本中从上到下是一行行写的
- 解释器是从上到下是一行行解释的
- 调试也是从头到尾一行行执行的
![图片描述 [oeasy]python0009 - 设置断点_break_point_debug_19](https://file.cfanz.cn/uploads/jpeg/2022/10/19/5/PT433cJ6B5.jpeg)
- 但是这一行行的是在有点慢啊
- 毕竟我们都是经历过万行代码的人了
- 那得按10000次的n才能执行完啊?
- 有快点的方法吗?🤔
- 我们下次再说!👋
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython
- 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy