[oeasy]python029_ until_直接跳转到_unt_breakpoint_断点函数

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 回顾早期计算机操作员多为女性,她们甚至发明了“bug”这个词。为了体验调试过程,我们故意在Python脚本中引入了一个拼写错误,并通过直接运行程序遇到了`NameError`。通过`until`命令,我们可以快速跳转到指定行执行,这对于大型项目非常有用。此外,`continue`(或简写`c`)命令则会一直执行到下一个断点或程序结束。我们还可以在代码中使用`breakpoint()`设置断点,配合`continue`命令使用,实现快速跳转至特定位置进行调试。这些技巧使调试过程变得高效且有趣,如同解开谜题一般。下次我们将探讨如何在调试过程中动态设置与取消断点。

until_直接跳转到_unt_breakpoint_断点函数 🥋

回忆上次内容

  • 上次 了解到
  • 计算机早期操作员 多是女性
  • 她们最早发明了 bug🕷 这个概念

  • 到现在也没有遇到一个bug
  • 如何才能让程序里面有bug 呢?

故意改错

  • 如果程序真的出了错误
  • 调试的时候会发生什么呢?

vi guido.py

  • 把第2行 故意改错

print("1982------Guido in cwi")

pront("1995------Guido in cnri")

print("2000------Guido in beopen")

print("2005------Guido in google")

print("2012------Guido in dropbox")

print("2020------Guido in microsoft")

先直接运行

  • 如果是python3 guido.py
  • 会报NameError
  • 之后直接退回shell

  • 犯罪现场的各个变量的值
  • 都无法取得
  • 只是知道 这个报错结果
  • 再进入 调试程序

调试程序

  • 运行到第二行的时候
  • 系统报了错误

  • 发现错误
  • 是好事
  • 不是 我们无能的证明
  • 而是 努力的见证
  • 更是 进步的阶梯
  • 我们就知道了
  • 错误的位置
  • 错误的类型
  • 甚至可以观察
  • 当时的现场的状态

观察犯罪现场

  • 在错误发生的现场
  • 观察当时环境中的变量和状态

  • 可以在环境中观察
  • print
  • pront
  • 一步步地 把bug找出来
  • 就像 把凶手 找出来 一样!

最真实的解谜游戏

  • debug是 我见过最真实的 解谜游戏 了
  • 比 剧本杀 好玩多了
  • 一步步地分析
  • 找不到凶手的 时候
  • 需要冷静地分析

  • 找到凶手的 时候
  • 那种快乐太真实了!!!

改回正确

  • 回到vim
  • 并且 修改了
  • 第二行pront的错误

  • 但这一行行执行
  • 实在 有点慢啊
  • 毕竟 都经历过 万行代码 了
  • 得 按10000次的n 才能执行完 啊?
  • 快点的方法吗?🤔
  • 可以直接跳到某一行吗?

until 直接跳到

  • 查询 until 的帮助

  • 我们去试试

until 使用

  • until 5
  • 可以直接运行到第5行
  • 如果有问题
  • 就会爆出来
  • 如果没有问题
  • 就等待后续
  • next
  • until

  • 这样可以
  • 快速捋到犯罪现场
  • 找到出bug时的状态
  • 除了 until之外
  • 还有什么命令
  • 可以 让流程 更快速地 流动吗?

continue

  • 快速流动这个命令叫做 continue
  • continue 可以缩写为
  • cont
  • c

  • continue就是一路向前
  • 直到 最后一行
  • 除非 遇到断点
  • breakpoint

一路向前

  • 由于没有断点
  • continue 会直接
  • 从第一句 执行到 最后一句

  • 如何让他在第3句之后停下来呢?

  • q命令退出pdb
  • 然后去编辑guido.py

指定 断点位置

  • 在第四行添加了一个函数
  • breakpoint()
  • 添加一个断点
  • 断点的位置
  • 不一定是 有bug的位置
  • 而是 为了找bug而设置的 观测点

  • 保存并退出vim
  • 重新用pdb3 运行 guido.py
  • 再试试 continue

调试过程

  • c这一下
  • 执行了三行代码
  • 直接continue 到了断点(breakpoint)

  • 断点位置
  • 是写到程序里的

再继续

  • 再continue一下

  • 就直接又绕道开头了

一个小笑话

  • 程序员 在公司写代码
  • 老婆 要他回来
  • 不回来 就离婚
  • 结果 他来了句
  • 等我修完这个bug
  • 就跟你离婚
  • 全部门的人 都愣住了
  • 领导 让他 赶紧回家
  • 他回复 死也不回家

  • 妻子 听完后
  • 安心地 挂上了电话
  • 再也没有
  • 比 这个更加 海枯石烂的爱情诺言!

总结

  • py文件
  • 按照顺序一行行执行的
  • 可以通过until命令
  • 直接跳转到某行

  • 还可以使用breakpoint()
  • 在程序中 设置断点
  • 然后配合continue
  • 一下子跳到断点位置
  • 但是这样 在debug的时候
  • 看不到 断点breakpoint 位置
  • 可以 在调试过程中
  • 动态地设置 或者 取消断点吗?🤔
相关文章
|
8天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80
|
15天前
|
人工智能 C语言 Python
[oeasy]python051_什么样的变量名能用_标识符_identifier
本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
108 69
|
17天前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
109 68
|
6天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
24 9
|
20天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
44 18
|
12天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
41 8
|
14天前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
23 5
|
19天前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
29 9
|
21天前
|
Python
Python中的函数
Python中的函数
34 8
|
22天前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
28 5