调试程序

回忆上次内容

  • ​py​​ 的程序是按照顺序执行的
  • 是一行行挨排解释执行的
  • 程序并不是数量越多越好
  • kpi也在不断演化

编辑

  • 写的代码越多
  • 出现的bug就越多
  • 那什么是bug呢?
  • 如何找bug呢?

尝试调试

  • 想要调试程序找bug
  • 首先得有一个程序
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]python0009 - 设置断点_break_point的更多相关文章

  1. 0823--静默安装、fiddler设置断点、f12清除数据记录

    刚写了半天,然后没保存,哎,墙角抹泪. Anyway,记一下最近工作中遇到的问题吧. 1. 静默安装 cmd命令:拖入exe 文件,空格后输入--silent-install 若要在安装时修改主页,则 ...

  2. Linux高级编程--04.GDB调试程序(设置断点)

    调试已运行的程序 在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb PID格式挂接正在运行的程序. 先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程 ...

  3. MFC源码不能设置断点调试

    用VS2013中MFC开发应用程序时,进入MFC源码设置断点调试.但是在调试过程中发现无法进入源码.最后发现在MFC设置的MFC的使用默认值是在共享dll中使用MFC,这就意味着MFC中的源码并没有连 ...

  4. Keil MDK 无法设置断点【worldsing】

    要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果:   1.keil 不能设置断点,每 ...

  5. 问题-[Delphi]无法设置断点

    问题现象: 今天突然发现不知何时起DELPHI7除了.dpr文件外,其余各Unit都无法设置断点.即在设计状态下设置了断点,在运行后出现的无效断点!百思不得其解...后查了许多资料,花了两个小时才搞好 ...

  6. 跟踪对象属性值的修改, 设置断点(Break on property change)

    代码 //Break on property change (function () { var localValue; Object.defineProperty(targetObject, 'pr ...

  7. Linux编程基础——GDB(设置断点)(转:TianFang,cnblog: http://www.cnblogs.com/TianFang/archive/2013/01/20/2868889.html)

    启动GDB后,首先就是要设置断点,程序中断后才能调试.在gdb中,断点通常有三种形式: 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种.设置断点的命令是break,它通 ...

  8. 如何在pl/sql developer 7运行到oracle存储过程设置断点的地方

    如何高效调试oracle存储过程,尤其是父子网状调用的存储过程 1,在需要设置断点的oracle存储过程处设置断点         如何设置断点:直接在某行oracle存储过程处单击行首,会在行首显示 ...

  9. ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案

    原文:ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案 针对 SSIS intergation 项目 > 属性 > Debug >Run64bITRunt ...

  10. Fiddler中设置断点修改返回结果Response

    测试有时会遇到需要测试返回不同的数据前端展示出来会如何?如果去数据库中的数据会比较麻烦.这样我们可以通过fiddler设置断点来修改返回的数据实现测试不同的数据展示. 1.设置断点 (1)点击菜单栏按 ...

随机推荐

  1. 记一次 .NET某酒店后台服务 卡死分析

    一:背景 1. 讲故事 停了一个月没有更新文章了,主要是忙于写 C#内功修炼系列的PPT,现在基本上接近尾声,可以回头继续更新这段时间分析dump的一些事故报告,有朋友微信上找到我,说他们的系统出现了 ...

  2. springboot 整合mail 发送邮件

    springboot 整合mail 发送邮件 pom.xml <properties> <java.version>1.8</java.version> <p ...

  3. 解密Prompt系列30. LLM Agent之互联网冲浪智能体

    这一章我们介绍能自主浏览操作网页的WebAgent们和相关的评估数据集,包含初级任务MiniWoB++,高级任务MIND2WEB,可交互任务WEBARENA,多模态WebVoyager,多轮对话Web ...

  4. Android 11(R) MultiMedia(十六)MediaCodec异步模式实现一个简易播放器

    MyDecoderBase.h #ifndef __MY_DECODERBASE_H__ #define __MY_DECODERBASE_H__ #include <media/stagefr ...

  5. .Net6 winform 程序使用依赖注入

    .net Blazor webassembly 和 webAPI 内建支持依赖注入, Winform 和 Console 应用虽然不带有依赖注入功能, 但增加依赖注入也很简单. 本文将示例如何为 Wi ...

  6. c# 拖拽列表顺序 | 拖拽合并分组 | 移除分组功能

    动图演示: 背景: 一开始做功能的时候没有增加排序的索引(sort-index),后来要求做拖拽排序功能:所以写了这个不需要初始排序就可以完成的拖拽功能:如果是table表格排序逻辑和这个相似,这里拿 ...

  7. linux系统下,搭建kafka环境(单机版)

    安装前准备: 安装JDK 安装zookeeper(如果使用kafka内置的zookeeper,可以忽略) 第一步.安装JDK kafka依赖JAVA环境,所以首先要安装jdk 第二步.安装zookee ...

  8. Spring源码——@Component,@Service是如何被解析?

    引言 在Spring中,Component.Service是在工作中经常被使用到的注解,为了加深对Spring运行机制的理解,今天我们一起来看一下Spring中对Component等注解的处理方式 C ...

  9. 父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法 静态属性通过类.属性的方式获取,对象获取使用get方法获取 package com.example.core.myd ...

  10. 使用嵌套的ScriptableObject及ReorderableList创建习题持久化数据

    使用嵌套的ScriptableObject及ReorderableList创建习题持久化数据 效果展示 题集持久化数据:存储题目,可以直接在inspector面板上创建对应的问题子项 问题持久化数据 ...