调试程序

回忆上次内容

  • ​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")

编辑

尝试调试

  • 粘贴到vim中

编辑

  • 原来是一把执行
  • 现在可以一步一步调试运行
pdb3 guido.py
  • 使用pdb来进行调试
  • ​pdb​​的意思是​​p​​ython's​​d​​e​​b​​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​​ 来对程序调试
  • 顺序执行
  • 程序在文本中从上到下是一行行写的
  • 解释器是从上到下是一行行解释的
  • 调试也是从头到尾一行行执行的

编辑

[oeasy]python0007-调试程序_debug的更多相关文章

  1. VS2015下如何用编译、调试程序。

    VS2015下如何用编译.调试程序. (通过实践给出截图) 安装步骤: 下载安装网址[VS2015下载地址](http://www.ithome.com/html/win10/164028.htm) ...

  2. #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #endif

    情况1:#ifdef _DEBUGvirtual void AssertValid() const;                 //assert(断言)valid(有效的,正确的)virtual ...

  3. 使用NSAssert()和NSParameterAssert调试程序

    NSAssert: NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异 ...

  4. Android 软件开发之如何使用Eclipse Debug调试程序详解及Eclipse常用快捷键(转)

    1.在程序中添加一个断点如果所示:在Eclipse中添加了一个程序断点 在Eclipse中一共有三种添加断点的方法 第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将 ...

  5. Android成长日记日记-Debug调试程序

    Debug调试程序: 1. 调试是程序员无法逃避的工作.调试方法有很多种,但归根结底,就是找到印发错误的代码 2. Debug调试可以快速准确的定位到错误问题的位置,以及它的调用关系 3. Debug ...

  6. 用GDB调试程序(一)

    http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...

  7. 怎样在myEclipse中使用debug调试程序?

    怎样在myEclipse中使用debug调试程序? 最基本的操作是:     1.首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类 ...

  8. 慕课网-安卓工程师初养成-5-4 使用 Eclipse 调试程序

    来源:http://www.imooc.com/video/1627 IDE断点调试功能 比如 之前的程序,写错了,变成如下 package com.imooc; import java.util.S ...

  9. delphi使用outputdebugstring调试程序和写系统日志

    delphi使用outputdebugstring调试程序和写系统日志 procedure TForm1.btn1Click(Sender: TObject); begin OutputDebugSt ...

  10. Eclipse中用Logcat调试程序

    调试程序的一种方法是用Logcat程序,在Eclipse中windows->show view->other->android->logcat可打开. 然后程序加入androi ...

随机推荐

  1. wpf 自定义轮播图组件

    轮播图组件代码: [Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)][TemplateP ...

  2. 基于 Kubernetes 的 CICD 基础设施即代码

    在上一篇基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以 ...

  3. 基于WebSocket的modbus通信(一)- 客户端

    上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能. 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应. 接下来要做的就是实现Modb ...

  4. 实例讲解多处理器下的计算机启动(xv6的启动过程)

    启动 启动方面的文章之前也写过,那是我的第一篇文章,本文在前文的基础之上完善,然后增加了多处理器启动的情况,废话不多说直接来看. 启动可以分为两种,一种为冷启动,是指计算机在关机状态下按 POWER ...

  5. ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)

    第六讲教程只简单介绍了Jolt的chain转换模式,本节课介绍下Jolt的各种转换模式. 点击的处理器JoltTransformJSON高级配置选项,进行测试Jolt的转换模式. 1.Cardinal ...

  6. TiDB 多集群告警监控-中章-融合多集群 Grafana

    author:longzhuquan 背景 随着公司XC改造步伐的前进,越来越多的业务选择 TiDB,由于各个业务之间需要物理隔离,避免不了的 TiDB 集群数量越来越多.虽然每套 TiDB 集群均有 ...

  7. 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 ...

  8. Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  9. 阿里云ECS主机自建SNAT,实现没有公网的主机通过有公网的主机访问外网

    目的: SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网 实现前提: 有公网的主机与没有公网的主机必须处在同一个VPC安全组(确保两个主机互通才可以) 全程都在有公网的主机上操作 开启 ...

  10. iOS:长图切割并转为动画gif——精灵表单sprite Sheet的转化

    iOS:长图切割并转为动画gif--精灵表单sprite Sheet的转化 通常的,iOS显示gif可以将文件转为NSData后再对其进行解析,通过CADisplayLink逐帧进行提取.播放,判断N ...