如何复现并修复一个缺陷(bug)程序
文章目录
前言
这里记录一点工程性的东西:
1)以PHP bug为例,如何复现这样的真实、大型缺陷程序呢;
2)如何将开发者的补丁应用到缺陷程序中,修复复现出来的bug。
时间很紧,这里就随便记两笔吧。
1 复现bug
首先,PHP 有个bug tracking system,地址是:https://bugs.php.net/
有各种bug,还都有对应的补丁。
我选择复现的是: Bug #74977
确定要复现的bug之后,接下来就开始复现了
1.1 先要下载对应版本的PHP
这个用git指令就好了,没什么好说的。
PHP在github上有版本库的,去下就ok。
git pull origin PHP-7.1.7
这是其中一个要用到的指令,其他的我都快忘了,,,
有空补充进来(在另外一台电脑上)
1.2 然后要顺利编译,运行PHP
一开始完全不懂php,也根本不知道怎么编译,运行,半天也没看到一个管用的readme。
反正就是各种摸索吧,也挺麻烦的
记起来了,是不断研究Prophet (来自MIT的自动修复工具) 的脚本,最后才知道,要:
./buildconf这个操作是生成configure文件
./configure这个操作是生成makefile(应该是吧)
make这里是编译
make完之后,会提示你
make test。这里就是运行所有测试用例了(非常多,1万个起步)
1.3 要设计PHP的失败测试用例,并成功运行(我记得这里最坑,比较麻烦)
我肯定不能每次都运行一万个测试用例,那多麻烦
此外,我还要把bug对应的错误(失败)测试用例给提取出来(对应网站:https://bugs.php.net/bug.php?id=74977)
提取出来之后写成一个独立的phpt文件,然后又研究prophet的脚本,
一顿研究下来,对应写了几个脚本(有空会补充)
然后就成功运行了指定的测试用例。
为什么说坑呢,
因为一开始研究的不是这个bug:
在复现Bug #77124 FTP with SSL memory leak的时候,一直有错误(Fatal error: Call to undefined function ftp_ssl_connect())百思不得其解,各方查找也没有答案,所以最后才转向了Bug #74977的复现
此外我还找个几个bug,都报这种Fatal error: Call to undefined function ××× 的错误,真的是扎心了。。。
为什么会这样呢?
有待研究。
2 修复bug
在 https://bugs.php.net/bug.php?id=74977 这里有这个bug对应的修复信息,
去找到,然后替换缺陷程序对应的版本中的代码。
然后重新
./buildconf
./configure
make
一遍。
然后再测试那个失败测试用例,发现通过了!
ok。没问题了。
总结
还是要保持努力…
学习是很自然的事情
信息不全之处,有空补充。
- 关于“如何检测节点网络中是否存在闭环之java实现”的程序bug修复
- Cocos2d-x 3.0 JNI BUG 修复。(Android 如何创建一个线程 延迟执行函数 创建一个随机数)
- 开源验证码程序 Securimage 3.0 的一个小bug修复
- (6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug
- Linux内核如何装载和启动一个可执行程序
- 一个bug引发对小程序运行原理的思考
- Android导出一个JAR库/Android如何将程序打成jar包/android 打包
- 如何制作一个倒计时的程序?
- c#如何写一个自杀程序
- RunLoop学习笔记,从CF层面了解由于CFRunLoopMode机制iOS程序ScrollView的滑动为何如此平滑的原因。还有介绍AFNetworking如何单独发起一个global threa
- 如何编写程序,输出一个整数的每一位?
- 如何为一个 .net 的 Web Application 制作一个安装程序
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- inno setup软件--教你如何制作一个漂亮的安装程序
- 如何用.net程序来判断一个网站是否正常打开小解
- 测试人员如何报一个bug,性能测试,负载测试,压力测试
- GCC & ELF文件格式 &linux内核如何加载和启动一个可执行程序
- Linux 命令,如何让运行一个jar程序,当控制台退出后,仍然保持运行状态
- 程序中如何简便表示一个很大的数
- 程序题:输入数字,输出字符串。 如何逆序一个字符串!