[oeasy]python0009 - 设置断点_break_point
调试程序
回忆上次内容
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")
- 首先要有这个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
[oeasy]python0009 - 设置断点_break_point的更多相关文章
- 0823--静默安装、fiddler设置断点、f12清除数据记录
刚写了半天,然后没保存,哎,墙角抹泪. Anyway,记一下最近工作中遇到的问题吧. 1. 静默安装 cmd命令:拖入exe 文件,空格后输入--silent-install 若要在安装时修改主页,则 ...
- Linux高级编程--04.GDB调试程序(设置断点)
调试已运行的程序 在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb PID格式挂接正在运行的程序. 先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程 ...
- MFC源码不能设置断点调试
用VS2013中MFC开发应用程序时,进入MFC源码设置断点调试.但是在调试过程中发现无法进入源码.最后发现在MFC设置的MFC的使用默认值是在共享dll中使用MFC,这就意味着MFC中的源码并没有连 ...
- Keil MDK 无法设置断点【worldsing】
要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果: 1.keil 不能设置断点,每 ...
- 问题-[Delphi]无法设置断点
问题现象: 今天突然发现不知何时起DELPHI7除了.dpr文件外,其余各Unit都无法设置断点.即在设计状态下设置了断点,在运行后出现的无效断点!百思不得其解...后查了许多资料,花了两个小时才搞好 ...
- 跟踪对象属性值的修改, 设置断点(Break on property change)
代码 //Break on property change (function () { var localValue; Object.defineProperty(targetObject, 'pr ...
- Linux编程基础——GDB(设置断点)(转:TianFang,cnblog: http://www.cnblogs.com/TianFang/archive/2013/01/20/2868889.html)
启动GDB后,首先就是要设置断点,程序中断后才能调试.在gdb中,断点通常有三种形式: 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种.设置断点的命令是break,它通 ...
- 如何在pl/sql developer 7运行到oracle存储过程设置断点的地方
如何高效调试oracle存储过程,尤其是父子网状调用的存储过程 1,在需要设置断点的oracle存储过程处设置断点 如何设置断点:直接在某行oracle存储过程处单击行首,会在行首显示 ...
- ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案
原文:ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案 针对 SSIS intergation 项目 > 属性 > Debug >Run64bITRunt ...
- Fiddler中设置断点修改返回结果Response
测试有时会遇到需要测试返回不同的数据前端展示出来会如何?如果去数据库中的数据会比较麻烦.这样我们可以通过fiddler设置断点来修改返回的数据实现测试不同的数据展示. 1.设置断点 (1)点击菜单栏按 ...
随机推荐
- Vue 3.3 发布
本文为翻译 原文地址:宣布推出 Vue 3.3 |The Vue Point (vuejs.org) 今天我们很高兴地宣布 Vue 3.3 "Rurouni Kenshin" 的发 ...
- Android 13 - Media框架(31)- ACodec(七)
关注公众号免费阅读全文,进入音视频开发技术分享群! 之前的章节中我们解了 input buffer 是如何传递给 OMX 的,以及Output buffer 是如何分配并且注册给 OMX 的.这一节我 ...
- Android 12(S) ALooper AHandler AMessage(一)
卧榻之侧岂容他人酣睡,到现在ALooper AHandler AMessage的工作原理一直都没搞懂,很慌!看他们的路径都在libstagefright/foundation下,作为一个foundat ...
- C# wpf 实现截屏框实时截屏功能
wpf截屏系列第一章 使用GDI+实现截屏第二章 使用DockPanel制作截屏框第三章 实现截屏框实时截屏(本章)第四章 使用ffmpeg命令行实现录屏 文章目录wpf截屏系列前言一.实现步骤1.获 ...
- React 的 KeepAlive 探索
什么是 KeepAlive? 用过 Vue 的童鞋都知道 Vue 官方自带了 Keep-Alive 组件,它能够使组件在切换时仍能保留原有的状态信息,并且有专门的生命周期方便去做额外的处理.该组件在很 ...
- grid 布局兼容性问题
低版本的安卓机上是不生效的 代码 .grid_4 { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: ...
- 使用Logstash同步Mysql到Easysearch
从 MySQL 同步数据到 ES 有多种方案,这次我们使用 ELK 技术栈中的 Logstash 来将数据从 MySQL 同步到 Easysearch . 方案前提 MySQL 表记录必须有主键,比如 ...
- reids分片技术cluster篇
为什么学redis-cluster 前面两篇文章,主从复制和哨兵机制保障了高可用 就读写分离,而言虽然slave节点扩展了主从的读并发能力 但是写能力和存储能力是无法进行扩展,就只能是master节点 ...
- MySQL插入中文数据时发生错误或者乱码的一些坑
最近新入职的工作,火急火燎就下了个mysql,没想到安装时配置没弄好.今天在测试数据时,插入中文数据到mysql都是问号,先后查了半天修改表结构,数据库编码,my.ini文件都没有用. 首先第一步,打 ...
- mysql中常用的三种插入数据的语句
mysql中常用的三种插入数据的语句: insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错: replace into表示插入替换数据,需求表中有Prim ...