Skip to content

Latest commit

 

History

History
264 lines (185 loc) · 5.72 KB

032-905257-until_直接跳转到_unt_breakpoint_断点函数.sy.md

File metadata and controls

264 lines (185 loc) · 5.72 KB
show version enable_checker
step
1.0
true

调试程序 🥊

回忆上次内容

  • py文件 是 按照顺序
    • 一行行 挨排 解释执行的
    • 可以用 pdb3 hello.py
      • 来调试程序
  • 顺序执行
    • 程序 在文本中 从上到下 是
      • 一行行写的
    • 解释器 从上到下 是
      • 一行行解释的
    • 调试 也是 从上到下
      • 一行行 调试的

图片描述

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

故意改错

  • 如果程序真的出了错误
    • 调试的时候会发生什么呢?
vi guido.py
  • 把第2行 故意改错

图片描述

先直接运行

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

图片描述

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

调试程序

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

图片描述

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

观察犯罪现场

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

图片描述

  • 可以在环境中观察

    • print
    • pront
  • 一步步地 把bug找出来

    • 就像 把凶手 找出来 一样!

最真实的解谜游戏

  • debug是 我见过最真实的 解谜游戏 了

    • 比 剧本杀 好玩多了
      • 一步步地分析
  • 找不到凶手的 时候

    • 需要冷静地分析

图片描述

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

改回正确

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

图片描述

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

until 直接跳到

  • 查询 until 的帮助

图片描述

  • 我们去试试

until 使用

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

图片描述

  • 这样可以

    • 快速捋到犯罪现场
    • 找到出bug时的状态
  • 为什么 把程序错误

    • 叫做 bug 🪰 呢?
      • bug和虫子(bug) 有什么关系呢?

第一个错误 bug

  • 历史上 第个程序错误 是
    • 一只虫子bug🪰
  • bug🪰 飞进继电器(relay)计算机(computer)里面 来
    • 导致 当时的继电器 短路

图片描述

  • 所以 后来
    • 管错误 叫做bug
    • 管调试程序错误 叫做 debug
    • 减少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 位置
  • 可以 在调试过程中

    • 动态地设置 或者 取消断点吗?🤔
  • 我们下次再说!👋