[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
的意思是p
ython'sd
eb
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
来对程序调试
- 顺序执行
- 程序在文本中从上到下是一行行写的
- 解释器是从上到下是一行行解释的
- 调试也是从头到尾一行行执行的
编辑
- 但是这一行行的是在有点慢啊
- 毕竟我们都是经历过万行代码的人了
- 那得按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)点击菜单栏按 ...
随机推荐
- c++调用动态dll库
首先把需要调用的动态库dll和它依赖的对象都要放入到运行目录,debug环境就是debug目录下了. 然后就写代码: #include <iostream> #include <wi ...
- 改造 Kubernetes 自定义调度器
原文出处:改造 Kubernetes 自定义调度器 | Jayden's Blog (jaydenchang.top) Overview Kubernetes 默认调度器在调度 Pod 时并不关心特殊 ...
- 一文读懂Apollo客户端配置加载流程
SpringBoot集成Apollo源码分析 本文基于 apollo-client 2.1.0 版本源码进行分析 Apollo 是携程开源的配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修 ...
- 智影AI故事转视频创作神器!快速开启AI绘画小说推文之旅
1.前言 1.1 生成内容形式 生成内容形式主要包含三种,PGC(Professionally Generated Content).UGC(User Generated Content).AIGC( ...
- undefined和null js数据类型转换自动转换布尔类型
基本数据类型之undefined和null undefined是表示未找到,是变量没有正确赋值数据时,生成的数据类型 var int : console.log(int)//undefined nul ...
- CF1626E
problem 我们可以考虑什么情况下这个点一定可以到黑点. \(c_i = 1\). \(c_{son} = 1\). 儿子可以,并且儿子子树内有两个黑点 请两个不必多说,看最后一个. 假如说考虑他 ...
- INFINI Gateway 与华为鲲鹏完成产品兼容互认证
何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云.私有云.混合云.桌面云)推出的一项合作伙伴计划,旨在为构建持续发展.合作共赢的鲲鹏生态圈,通过整合华为的技术.品牌资源,与合作伙伴共享商 ...
- INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
近年来,日志管理平台越来越流行.使用日志管理平台可以实时地.统一地.方便地管理和查看日志,挖掘日志数据价值,驱动运维.运营,提升服务管理效率. 方案架构 Beats 是轻量级采集器,包括 Filebe ...
- C#.NET BC BouncyCastle 国密 SM2 解密遇到 Invalid point encoding 77
C#.NET BC BouncyCastle 国密 SM2 解密遇到 Invalid point encoding 77 参考:https://blog.csdn.net/seeyouagen/art ...
- 开机启动VM WARE 某台虚拟机
新建一个批处理,内容如下: set vm_root=C:\Program Files (x86)\VMware\VMware Workstation "%vm_root%\vmrun.exe ...