[oeasy]python0007-调试程序_debug
原创
©著作权归作者所有:来自51CTO博客作者overmind1980的原创作品,请联系作者获取转载授权,否则将追究法律责任
调试程序 🥊
回忆上次内容
- 是一行行挨排解释执行的
- 程序并不是数量越多越好
- kpi也在不断演化
![图片描述 [oeasy]python0007-调试程序_debug_python](https://s2.51cto.com/images/blog/202210/17072933_634c93dd38c7f81492.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
尝试调试
- 那 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")
![图片描述 [oeasy]python0007-调试程序_debug_python_02](https://s2.51cto.com/images/blog/202210/17072933_634c93dd47ea549992.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
尝试调试
![图片描述 [oeasy]python0007-调试程序_debug_github_03](https://s2.51cto.com/images/blog/202210/17072933_634c93dd44a8720973.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
-
pdb
的意思是p
ython'sd
eb
ugger🤖
逐步运行
![图片描述 [oeasy]python0007-调试程序_debug_python_04](https://s2.51cto.com/images/blog/202210/17072933_634c93dd6df7f35670.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
help
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_05](https://s2.51cto.com/images/blog/202210/17072933_634c93dd7283b46350.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 他给了我很多的命令
- 还说可以help 一下具体 topic
- 查看你哪个topic呢?
具体帮助
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_06](https://s2.51cto.com/images/blog/202210/17072933_634c93dd5b40f38065.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_07](https://s2.51cto.com/images/blog/202210/17072933_634c93dd7514317344.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
list
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_08](https://s2.51cto.com/images/blog/202210/17072933_634c93dd78f3b63403.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
使用命令
![图片描述 [oeasy]python0007-调试程序_debug_github_09](https://s2.51cto.com/images/blog/202210/17072933_634c93dd8bd4346752.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 确实可以看到上下文
- ->代表着当前运行到了哪里
- 怎么往下走呢?
next
![图片描述 [oeasy]python0007-调试程序_debug_github_10](https://s2.51cto.com/images/blog/202210/17072933_634c93dd49d7367931.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
![图片描述 [oeasy]python0007-调试程序_debug_github_11](https://s2.51cto.com/images/blog/202210/17072933_634c93dd722a721594.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 把1982年输出了
- 然后当前行来到了1995年
- 如何判断1995年在整个程序中的位置呢?
执行
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_12](https://s2.51cto.com/images/blog/202210/17072933_634c93dd83dbc60750.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
一路next
![图片描述 [oeasy]python0007-调试程序_debug_python_13](https://s2.51cto.com/images/blog/202210/17072933_634c93ddb1c2215306.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
完成调试
- 一路
next
下去 - python 解释器
- 就是这么一步步地解释执行的
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_14](https://s2.51cto.com/images/blog/202210/17072933_634c93dd950f82510.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 确实是顺序执行的
- 一行行挨排儿执行的
- 我们就一步步地把bug找出来
- 就像找凶手一样!
最真实的解谜游戏
- debug是我见过最真实的解谜游戏了
- 比什么剧本杀好玩多了
- 一步步地分析
- 找不到罪魁祸首的时候
![图片描述 [oeasy]python0007-调试程序_debug_python_15](https://s2.51cto.com/images/blog/202210/17072933_634c93dd91bc310599.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 需要冷静地分析
- 找到罪魁祸首的时候
- 那种快乐太真实了!!!!
- 终于来到最后一行
- 如果到这里再next
- 会发生什么呢?
最后一步
- 就会返回(return)到python
- 然后返回(return)到shell
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_16](https://s2.51cto.com/images/blog/202210/17072933_634c93dd9b39c63208.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 如果这个时候已经到了程序的尽头
- 再next会发生什么呢?
绕圈
![图片描述 [oeasy]python0007-调试程序_debug_github_17](https://s2.51cto.com/images/blog/202210/17072933_634c93dd8310017363.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
第一个错误 bug
![图片描述 [oeasy]python0007-调试程序_debug_github_18](https://s2.51cto.com/images/blog/202210/17072933_634c93dd770c791553.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 这只虫子
bug
🪰 - 飞进继电器(relay)计算机(computer)里面来
- 导致当时的继电器短路
- 管错误叫做bug
- 管调试程序错误叫做
debug
总结
- 一行行挨排解释执行的
- 我们可以
pdb3 hello.py
来对程序调试
- 程序在文本中从上到下是一行行写的
- 解释器是从上到下是一行行解释的
- 调试也是从头到尾一行行执行的
![图片描述 [oeasy]python0007-调试程序_debug_程序错误_19](https://s2.51cto.com/images/blog/202210/17072933_634c93dd8d41c10174.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)