oeasy教您玩转python - 4 - # 调试程序
调试程序
回忆上次内容
py的程序都是写在明面上的- 所有需要执行的事情都明着写到了
py文件中 - 用
python3解释py文件进行执行 - 可以下载人家写好的
py文件 - 下载的
py文件可以直接读懂 - 编写程序的人怎么挣钱呢?
开源
- Python 程序确实是直接就能看到源代码的
- 不能加密既是缺点也是优点
缺点:
- 无法保密
- 谁都能看见和改写
- 传统的软件卖的是序列号
- 思路是以前许可证的思路
- 由一个核心节点进行授权
其他用户得到某些许可
- 甚至是持证抢劫的许可

- 现代的许可证 license 主要都是赋予用户更多权利
- 比如 GPL 许可证
GPL
GPL 又称为 Copyleft
- 这是一种英语的调侃
- 因为 Copyright 的那个 right 有多个含义
用作 copyright 的时候
- right 是权利的意思
- 但它同时还是“右边”的意思
所以和他相反的就是 Copyleft
- 表示这是和 Copyright 是走另一边的
GPL 授权对被授权者是有要求的,它重点强调:
- 第一:和大部分开源软件一样,作品放在这里,你可以用,作者不为任何物理损失负责
- 第二:如果你,基于这个作品衍生了新的作品,那么这个新的“作品”,必须符合 GPL 协议,否则你就失去原作品的授权
- 第三,符合 GPL 协议的作品,在提供给它的使用者的时候,必须同时提供该作品的 GPL 部分的源代码,不能对使用者做出限定

- 这听起来很绕
- 其实本来是想知道开放了源代码程序员是怎么挣钱的?
现状
- 目前国内市场定制开发软件的需求越来越少
- 现在更多的是网站和移动应用
- 把代码捂在自己手里是没有用的
源代码的开放是发展的趋势
- 开放源代码可以让更多人才参与开发、修改和传播
- linux、debian、vim、python 的源代码大家都能看到和参与
这样的个人软件开发者主导的项目依靠人民战争战胜了软件巨头
- 参与的人越多
- 知名度越高
- 项目越活越
- 越有可能留得下来
- 让更多的人知道和参与
- 个人也因为参与的项目而更知名
不但软件
- 硬件、游戏、甚至虚拟角色歌姬等等方面
- 开源项目也越来越多

- 不过时代的洪流是从最早的水滴开始的
最早的python是由Guido开发的
- 当时 Guido 如何面对如何的抉择呢?

时代
最早 Guido 确实曾经在 CWI 工作
- CWI是荷兰的数学与计算机科学国家研究所

他希望有一种语言能够像C语言那样
- 全面调用计算机的功能接口
- 又能像shell那样,轻松的编程
荷兰的CWI 数学和计算机国家研究所开发了一种ABC语言
- 当时范罗苏姆在CWI工作,并参与到ABC语言的开发
- 他将自己所知的一切语言设计知识都倾注在这个项目上
- 尽管已经具备了良好的可读性和易用性
- 但ABC语言最终还是没有流行起来。
- 确实是在那里出现的 ABC 给 后来的 python 很大启发
Guido 后来去了 cnri
- 荷兰的国家研究中心

- 研究项目的经费确实是 cnri 出的
- 95 年当时还没有兴起开源运动
发展
当时的许可证是收费的
- guido 想把他做成开源的
- 但是没有立场
- 毕竟 cnri 花了钱
- 还有些是他在 cwi 的时候编写的程序 改的 bug

- 从python的所有者上面可以其实可以看到Guido的工作轨迹
- 虽然当时还没有开源这些概念和词汇
Guido 的考量
- 在 python 的 license 里面提到了 cwi 和 cnri

当时 python 的主要成员开始讨论
- python 应该继续免费开源还是商业
- Guido 认为如果商业化
- python 的用户就会离开
最终选择开源的语言和项目
- 贡献者和社区就是在这基础上发展起来的
但商业是世界运行的底层逻辑
- 强大的商业资本方会有律师、媒体
- python 在这商业的世界里举步维艰
- 这曾让 Guido 很苦恼
转机
开源运动的期末著作给了他启发
- 他开始选择 gpl 协议
后来互联网兴起
- 其中一个网站 BeOpen.com 基于开源技术制作
BeOpen 看到 Guido 的困惑
- 就想给他一份呢薪水
- 工作就是完善 python
- 这是很好的机会
- Guido 带着 3 个 CNRI 的同事一起去了
这时候 CNRI 的管理层慌了
- 他们觉得 Guido 疯了
- 那是个创业公司
- 找他谈话
- 去了就别想再回来
- 但是不可阻止了
人走了 CNRI 的项目自然也就黄了
- 不过去 beopen 的 2000 年
- 正好是互联网泡沫兴起的时候
- beopen 想做的是开源门户
- 泡沫破裂之后又怎么办呢?
后来
他从 beopen.com 之后
- Guido 很担心 python 源代码的所有权问题
后来 Guido 去了 soap
- 在那里他咨询了律师
- 并建立了 python 基金会
- 明确了 python 的协议和所属问题
开源运动已经发展起来了
- 他先加入 google
- 后来在 150 人的时候加入 dropbox
- 2020年 去了微软
- 这就是Guido和python的历史
- 我们用 python 为 Guido 写一个简历吧
继续编辑 py 文件
#用vi打开并编辑guido.py
vi guido.py
- 上次输出了两行内容
- 这次我们复制成 6 行
- gg 将光标移动回到最开头
- yG 从当前位置(最开头)复制到结尾
- 2P 粘贴 2 次
- i 为输出添加标号
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")
:w|!python3 %保存并用 python 解释当前程序- 可以看到输出了标了号的 6 行
- 这 6 行的顺序就是按照我们标号的顺序来的
顺序执行
- 这个过程叫做顺序执行
- 按照步骤,有先后次序的
- 按照时间顺序

顺序播放
- 就像我们听语音是挨排听的

- 顺序播放是按照列表顺序播放的
音符顺序
- 演奏音符也是一个个按照顺序演奏,才是这首歌曲
- 调换一下次序,就乱了,不是这个歌了
- 不过其实也是一种思路。。。

按部就班

- 我们的生活也是按照线性的时间线顺序完成的

学习
- 学习也一样
- 要按照时间的次第
- 一步一步来
- 啥都一样,别着急!
- 欲速则不达
- 那他是怎么解释执行的呢?
尝试调试
- 那 python 程序到底是怎么一步步解释执行的呢?
- 我们可以一步一步运行来调试
使用
pdb来进行调试pdb的意思是python'sdebugger
python3 -m pdb guido.py
#或者使用
pdb3

- 由于程序不知道哪里出的问题
- 所以一步步来执行
- 一行行执行的目的是去除
bug,也就是debug - 可是为什么把程序错误叫做
bug呢?
第一个错误 bug

- 历史上第一个程序错误是因为电脑里面飞进来一只虫子
bug - 所以后来管调试程序错误叫做
debug - 这个
bug是谁找出来的呢?
计算之母
- 找到
bug的第一个调试员或者叫程序员是一位女性 - 和现在程序员大多是男性不同
- 因为当时编程都得检查线路
- 跟编织很像
- 很容易变得一团乱麻
- 需要很细心、有条理的人

Grace Murray Hopper
故障
- 当时格蕾丝和她的同事们正艰难地搞清楚
他们正在使用的马克 II 电脑出现了什么故障
- 最后,他们发现一只活蛾被困在控制电路的一个电子开关中

- 不要害怕
bug,因为bug是程序员存在的基础 - 如果没有了
bug,那也就不需要程序员了 - 程序员本身就是
bug一般的存在 - 让我们来 debug!
进行调试

命令细节
运行之后
h查询help帮助l进行list列表n进行next向下执行q执行quit退出
- 这得动手试一试
完成调试
- 一路
next下去 - 程序执行完毕了
- 整个程序就算执行完成了
- python 解释器 就是这么一步步地解释执行的

总结
py的程序是按照顺序- 一行行挨排按顺序解释执行的
- 我们可以
python3 -m pdb hello.py来对程序调试 - 调试的目的是去除
bug - 别害怕
bug bug会有提示- 我们也就知道如何调试
debug
python3这个解释器到底是怎么执行的呢?- 我们下次再说!
oeasy教您玩转python - 4 - # 调试程序的更多相关文章
- oeasy教您玩转python - 006 - # hello world
Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- oeasy教您玩转linux010203显示logo
我们来回顾一下 上一部分我们都讲了什么?
- oeasy 教您玩转linux010101查看内核uname
linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...
- oeasy教您玩转linux010202软件包管理apt
顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010108到底哪个which
到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?
- oeasy教您玩转vim - 53 - # 批量替换
查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...
- oeasy教您玩转linux-010110内容回顾
我们来回顾一下 我们都讲了什么?
随机推荐
- (1)semantic-kernel入门课程
(1)semantic-kernel入门课程 获取OpenAI在线API 由于在国内的限制,我们并没有办法直接访问OpenAI,所以下面的教程我们会推荐使用https://api.token-ai.c ...
- 常回家看看之off_by_one
off_by_one这个漏洞比较特殊,它不像上一期的堆溢出,可以溢出很多字节,它只能溢出一个字节,在栈里面也可以通过这个漏洞修改返回地址什么的,在堆里面我们主要利用它来修改堆块的大小,形成fake_c ...
- sass 混合指令 (Mixin Directives)详解
混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left.混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变 ...
- centos7中输入ifconfig 没有IP地址
vmware安装的centos7中没有出现eth0网卡,也没有ip,不能上网,输入ifconfig后如下图 解决办法 1.编辑网卡的配置文件 vi /etc/sysconfig/network-scr ...
- wxPython==4.2.1 aui.AuiToolBar 如何去掉烦人的抓手?
aui.AuiToolBar 如何去掉烦人的抓手? 最近在用wxPython做一些GUI小应用,发现工具栏总有几个点(抓手),很影响美观,如下: 目前官方没有提供隐藏抓手的功能,需要更改源码的auib ...
- 关于ThreadLocal最直白的解释
ThreadLocal 底层原理如下: 实线是强引用,虚线是弱引用 Thread 持有 ThreadLocal 对象的引用,ThreadLocalMap 是 Thread 的成员变量,它是一个 Map ...
- 关于@synchronized
一.结论 1)@synchronized内部使用的是recursive_mutex_lock,也就是递归锁,对于统一线程来说,@synchronized加锁的方法可以重复加锁. 比如代码: - (vo ...
- 一款WPF的精简版MVVM框架——stylet框架的初体验(包括MVVM绑定、依赖注入等操作)
今天偶然知道一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很巴适,现在我做一个简单的demo来顺便来分享给大家. 本地创建一个WPF项目,此处我使用.NET ...
- Qt QMainWindow的使用
参考视频:黑马科技:https://www.bilibili.com/video/BV1XW411x7NU?p=19 QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu b ...
- 记一次 .NET某工控视觉自动化系统 卡死分析
一:背景 1. 讲故事 今天分享的dump是训练营里一位学员的,从一个啥也不会到现在分析的有模有样,真的是看他成长起来的,调试技术学会了就是真真实实自己的,话不多说,上windbg说话. 二:WinD ...