调试程序

回忆上次内容

  • ​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. 京东二面:Sychronized的锁升级过程是怎样的

    引言 Java作为主流的面向对象编程语言,提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题.其中,内置的关键字"Synchronized"扮演了至关重要的角色,它能 ...

  2. SpringMVC在返回JSON数据时出现406错误解决方案

    在SpringMVC框架的使用中常常会使用@ResponseBody注解,修饰"处理器"(Controller的方法),这样在处理器在返回完毕后,就不走逻辑视图,而是将返回的对象转 ...

  3. 通过 InnoSetup 美化安装界面

    InnoSetup 的美化相应的帖子也比较多,但是代码不是很全...所以我专门出了这篇文章来记录下这个美化过程.废话不多说,先上个成果: 前端er们可以直接下载 vue-nw-seed 这个分支,一键 ...

  4. Flutter(三):Flutter App 可行性分析

    一.生态建设 第三方Package https://pub.dev/packages?sort=popularity 截止2021年4月,第三方库达到17000+ 二.Devops 代码风格检查 An ...

  5. NOIP模拟101(多校33)

    T1 ladice 解题思路 我们把一个物品看做 \(A_i\) 与 \(B_i\) 之间的连边. 那么如果加入这条边之后联通块中有超过两个环或者两个环就是不合法的,也就是合法的状态只能是一个基环树和 ...

  6. JavaSE print printf println 区别

    *print与println,printf区别 System.out.print();括号内必须含有参数 System.out.println();括号内可以不含参数,此时代表newline即换行; ...

  7. LINQ to Entities does not recognize the method 'System.String ToString()' method

    LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method ca ...

  8. OpenWrt安装配置Tailscale

    什么是tailscale? Tailscale就是基于Wireguard的一个联网工具,无需公网地址,通过去中心化,实现各个节点之间点对点的连接.配置简单友好,支持的各类平台和客户端. 相比较其他组网 ...

  9. 地铁查询app 结对作业三

    经过今天一下午的奋斗 安卓app 只剩下最难的部分了 最短路径问题 我们考虑用迪杰斯特拉算法 不过 没有做出来 还要继续去学习一下这个代码 并寻求网上代码的帮助

  10. java多线程编程:你真的了解线程中断吗?

    java.lang.Thread类有一个 interrupt 方法,该方法直接对线程调用.当被interrupt的线程正在sleep或wait时,会抛出 InterruptedException 异常 ...