[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的意思是python'sdebugger
- 为什么要逐步运行呢?
逐步运行
- 由于程序不知道哪里出的问题
- 所以一步步来执行
编辑
- 一步步调试运行的目的是去除
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 ...
随机推荐
- wpf 自定义轮播图组件
轮播图组件代码: [Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)][TemplateP ...
- 基于 Kubernetes 的 CICD 基础设施即代码
在上一篇基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以 ...
- 基于WebSocket的modbus通信(一)- 客户端
上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能. 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应. 接下来要做的就是实现Modb ...
- 实例讲解多处理器下的计算机启动(xv6的启动过程)
启动 启动方面的文章之前也写过,那是我的第一篇文章,本文在前文的基础之上完善,然后增加了多处理器启动的情况,废话不多说直接来看. 启动可以分为两种,一种为冷启动,是指计算机在关机状态下按 POWER ...
- ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)
第六讲教程只简单介绍了Jolt的chain转换模式,本节课介绍下Jolt的各种转换模式. 点击的处理器JoltTransformJSON高级配置选项,进行测试Jolt的转换模式. 1.Cardinal ...
- TiDB 多集群告警监控-中章-融合多集群 Grafana
author:longzhuquan 背景 随着公司XC改造步伐的前进,越来越多的业务选择 TiDB,由于各个业务之间需要物理隔离,避免不了的 TiDB 集群数量越来越多.虽然每套 TiDB 集群均有 ...
- python3读csv文件,出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid con
使用csv.reader(file)读csv文件时,出现如下错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in positio ...
- Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 阿里云ECS主机自建SNAT,实现没有公网的主机通过有公网的主机访问外网
目的: SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网 实现前提: 有公网的主机与没有公网的主机必须处在同一个VPC安全组(确保两个主机互通才可以) 全程都在有公网的主机上操作 开启 ...
- iOS:长图切割并转为动画gif——精灵表单sprite Sheet的转化
iOS:长图切割并转为动画gif--精灵表单sprite Sheet的转化 通常的,iOS显示gif可以将文件转为NSData后再对其进行解析,通过CADisplayLink逐帧进行提取.播放,判断N ...