调试程序

回忆上次内容

  • ​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. swagger 的配置

    1,开启swagger : c.IncludeXmlComments(GetXmlCommentsPath()); protected static string GetXmlCommentsPath ...

  2. uniapp 配置 基座调试指定页面

    在用hbuildx时,用自定义基座,调试程序时,有的页面因为基座缺少组件而进不去,这个时候就可以用指定页面的方式,我们只需要把进入页面的入参传进去,这个时候打开页面就是指定要调试的页面了. 就在pag ...

  3. 7.14考试总结(NOIP模拟15)[夜莺与玫瑰·影子·玫瑰花精]

    梦总是有会醒来的时候,不会醒的梦总有一天会变成悲伤. 前言 这次考试的思维含量有一点大(此时距离考试还有 7min 而我的总结还没写完..) 但是对于以前的考试来讲还是有所进步的,毕竟在考试的时候还是 ...

  4. this的二种使用方式

    package com.ht.TestThis; public class TestThisKey { public static void main(String[] args) { // TODO ...

  5. node写接受

    选择数据库类型:mongodb 定义用户集合的字段(域): 用户名  密码  性别  爱好(多选)  简介 npm i -S express mongoose 在项目中连接mongodb服务 inde ...

  6. java小记-scanner

    不想打字也是我的罪过吗? 作业2: 老师的代码: 结果 我的代码看起来冗余: 想说的: 我的本意是以为scanner只能记录一个数,然后就想着输入两次就能算两个数了,但没想到人家只是让你输就完了.不要 ...

  7. windows 右键菜单编辑/删除

    windows 右键菜单编辑/删除.WIN7,WIN8,WIN10,WIN11. 在 https://www.sordum.org/7615/easy-context-menu-v1-6/ 页面底部下 ...

  8. k8s搭建安装 Harbor 私有镜像仓库(本地仓库,内网仓库)

    主要参考 https://www.cnblogs.com/wangzy-Zj/p/14011228.html 额外: 1.如果 harbor.yml中的域名和openssl 生成的不一致,你改了hos ...

  9. vue排行榜 加单位

  10. MySQL BETWEEN AND包含边界值

    select count(1) from table_a where my_date between '20230715' and '20230717'; 上面的SQL我们发现只统计了20230715 ...