您的位置:首页 > 其它

如何复现并修复一个缺陷(bug)程序

2018-12-03 09:59 483 查看
版权声明:如需转载或引用,请注明出处。 https://blog.csdn.net/weixin_39278265/article/details/84748693

文章目录

  • 2 修复bug
  • 总结
  • 前言

    这里记录一点工程性的东西:
    1)以PHP bug为例,如何复现这样的真实、大型缺陷程序呢;
    2)如何将开发者的补丁应用到缺陷程序中,修复复现出来的bug。

    时间很紧,这里就随便记两笔吧。

    1 复现bug

    首先,PHP 有个bug tracking system,地址是:https://bugs.php.net/

    在这个网页: https://bugs.php.net/search.php?limit=30&order_by=id&direction=DESC&cmd=display&status=Open&bug_type=All&patch=Y&pull=Y

    有各种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。没问题了。

    总结

    还是要保持努力…
    学习是很自然的事情

    信息不全之处,有空补充。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐