[oeasy]python0007-调试程序_debug
调试程序
回忆上次内容
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
的意思是p
ython'sd
eb
ugger
- 为什么要逐步运行呢?
逐步运行
- 由于程序不知道哪里出的问题
- 所以一步步来执行
编辑
- 一步步调试运行的目的是去除
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才能执行完啊?
- 有快点的方法吗?
- 我们下次再说!
- 蓝桥->用户登录
- github->GitHub - overmind1980/oeasy-python-tutorial: 良心的 Python 教程,面向零基础初学者简明易懂的 Python3 入门基础课程。在linux+vim生产力环境下,从浅入深,从简单程序学到网络爬虫。可以配合蓝桥云上实验环境操作。
- gitee->oeasy教您玩转python教程: 面向零基础初学者的简明易懂的 Python3 入门课程,对没有编程经验的同学也非常友好。在vim下从浅入深,逐步学习。从基础入门学习到爬虫。
- 视频->[oeasy]教您玩转python零基础学python入门教程(合集)_哔哩哔哩_bilibili
[oeasy]python0007-调试程序_debug的更多相关文章
- VS2015下如何用编译、调试程序。
VS2015下如何用编译.调试程序. (通过实践给出截图) 安装步骤: 下载安装网址[VS2015下载地址](http://www.ithome.com/html/win10/164028.htm) ...
- #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #endif
情况1:#ifdef _DEBUGvirtual void AssertValid() const; //assert(断言)valid(有效的,正确的)virtual ...
- 使用NSAssert()和NSParameterAssert调试程序
NSAssert: NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异 ...
- Android 软件开发之如何使用Eclipse Debug调试程序详解及Eclipse常用快捷键(转)
1.在程序中添加一个断点如果所示:在Eclipse中添加了一个程序断点 在Eclipse中一共有三种添加断点的方法 第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将 ...
- Android成长日记日记-Debug调试程序
Debug调试程序: 1. 调试是程序员无法逃避的工作.调试方法有很多种,但归根结底,就是找到印发错误的代码 2. Debug调试可以快速准确的定位到错误问题的位置,以及它的调用关系 3. Debug ...
- 用GDB调试程序(一)
http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...
- 怎样在myEclipse中使用debug调试程序?
怎样在myEclipse中使用debug调试程序? 最基本的操作是: 1.首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类 ...
- 慕课网-安卓工程师初养成-5-4 使用 Eclipse 调试程序
来源:http://www.imooc.com/video/1627 IDE断点调试功能 比如 之前的程序,写错了,变成如下 package com.imooc; import java.util.S ...
- delphi使用outputdebugstring调试程序和写系统日志
delphi使用outputdebugstring调试程序和写系统日志 procedure TForm1.btn1Click(Sender: TObject); begin OutputDebugSt ...
- Eclipse中用Logcat调试程序
调试程序的一种方法是用Logcat程序,在Eclipse中windows->show view->other->android->logcat可打开. 然后程序加入androi ...
随机推荐
- IceRPC之深入理解调度管道->快乐的RPC
作者引言 很高兴啊,我们来到了IceRPC之深入理解调度管道->快乐的RPC,为上篇的续篇,深入理解常见的调度类型, 基础引导,有点小压力,打好基础,才能让自已不在迷茫,快乐的畅游世界. 传入请 ...
- jQuery实现简单的模态框
<!-- jquery模态框 --> <!DOCTYPE html> <html lang="en"> <head> <met ...
- yapi 自动化安装遇到的问题
yapi版本: 1.10.2 yapi server 启动之后 填写好配置,点击开始部署,发现控制台打印如下日志 (node:19879) Warning: Accessing non-existen ...
- golang http client 长连接vs短连接基准测试
package main import ( "io/ioutil" "net/http" "strings" "testing&q ...
- Python的进程和线程——一些基础概念
1. 线程和进程 1.1 线程和进程 进程可以包含多个并行运行的线程: 通常,操作系统创建和管理线程比进程更省CPU资源: 线程用于一些小任务,进程用于繁重的任务: 同一个进程下的线程共享地址空间和其 ...
- 容器化部署wordpress个人博客系统lnmp环境[自定义网络]
容器化部署个人博客系统lnmp环境 #告警: WARNING: IPv4 forwarding is disabled. Networking will not work. 96c083a8b5811 ...
- Oracle优化神技之临时表
Oracle临时表在处理临时数据.会话数据隔离和复杂查询优化方面非常有用. 其底层逻辑是通过Oracle特殊的临时表来减少I/O操作和日志开销,提高了数据库性能和查询效率.开发者可以根据具体需求和场景 ...
- python——入门
操作系统 操作系统就是一个特殊的软件 作用有两个,第一个:直接操作硬件:第二个:把操作硬件的代码封装成一个又一个的系统调用 python的特点 python是完全面向对象的语言 函数,模块,数字,字符 ...
- 震惊!docker镜像还有这些知识你都知道吗
震惊!docker镜像还有这些知识你都知道吗? 镜像搜索 语法 [root@hmm docker-hello]# docker search -h Flag shorthand -h has been ...
- 如果设备不支持vulkan,就用swiftshader,否则就加载系统的vulkan的正确姿势(让程序能够智能的在vulkan-1.dll和libvk_swiftshader.dll之间切换)
一些老的显卡设备没有更新驱动,甚至根本就不支持Vulkan的显卡,遇到静态链接的vulkan-1.lib文件,启动exe就会崩溃. 你以为从别的机器拷贝这个vulkan-1.dll就可以了吗? 太傻太 ...