本文记录本人从发现bug,提交bug,到修复bug的过程。下面enjoy:

1.发现bug

  由于项目需要,开发了一个视频检测demo,类似于扫一扫二维码的程序,不过不是这个程序不是扫二维码。具体实现参照了这篇文章

  2016年10月20号,发现了第一个bug:在多次start,stop后,大约是6次,在iphone6平台上,程序就会闪退。检测了一下代码,发现不是自己造成的。再查看一下内存,发现opencv 的CvVideoCamera类在停止后不会销毁内存,导致内存泄漏(如图1)。于是向opencv维护组提交了第一个bug#7527

  

                      图1:内存泄漏

2.修复bug

  2016年10月24号,周一早上,迫于压力(项目快要交付了,但是这个问题还没修复,等官方修复都不知道要等到猴年马月,于是决定自己动手解决),把oepncv 的官方源码拷贝到自己的工程下,然后xcode 就发现代码用了dealloc 方法和release方法,因为我的xcode环境用的ARC,所以MRC的手动内存管理方法不能使用,去掉后编译发现app没有问题了,于是开心的提交的解决方法。   

  但是很快就发现,代码虽然能在工程下完美运行,但是到了opencv的framework后不能工作了。一开始以为是自己编译的问题,所以搞了好久都没解决。

  下班后,一直都在纠结这个问题的原因所在,晚上洗澡时,突然想起:xcdoe在ARC模式下不是没有内存管理代码,而是由xcode在编译时自动加上去的,所以把dealloc删除后编译的framework里面的代码就缺少内存管理代码了,这就能解释为什么代码在工程里面时工作正常,但是到了framework后就不正常了。

  第二天,迫不及待的回来把代码改了,编译进framework,测试通过(如图2)。

   

                      图2:修复内存泄漏 

3.合并

  提交pull request#7568

  



                      图3:代码被合并到master分支

          

note:

1.在xcode下编译的framework里面不需要内存管理代码,因为xcode自动添加上去了,但是oepncv的framework是使用Python脚本编译的

2.opencv for ios 的framework是通过opencv/platforms/ios/目录下的buil_framework.py脚本编译的,具体命令参照该目录下的readme.txt

3.第二个bug其实就是多次stop后,第二次时release的对象已经被释放了,所以导致程序crash #7570

4.第二个bug的PR #7571

为opencv贡献代码的更多相关文章

  1. 如何为PHP贡献代码

    PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天 ...

  2. 如何在github上fork一个项目来贡献代码以及同步原作者的修改

    [-] 如何贡献自己的力量 如何让自己的项目与原作者的项目保持同步 作为一个IT人,通过github进行学习是最快的成长手 段.我们可以浏览别人的优秀代码.但只看不动手还是成长得很慢,因此为别人贡献代 ...

  3. 花20分钟写的-大白话讲解如何给github上项目贡献代码

    原文地址:http://site.douban.com/196781/widget/notes/12161495/note/269163206/ 本文献给对git很迷茫的新手,注意是新手,但至少会点基 ...

  4. 【转】如何在github上fork一个项目来贡献代码以及同步原作者的修改 -- 不错

    原文网址:http://www.cnblogs.com/astwish/articles/3548844.html 作为一个IT人,通过github进行学习是最快的成长手段.我们可以浏览别人的优秀代码 ...

  5. 为微软samples-for-ai贡献代码是种怎么样的体验?

    推送原文链接:传送门 关注SomedayWill,了解为微软项目贡献代码的始终. 还记得微软神器samples-for-ai吗?它可不仅仅可以用来安装框架,它其实是个开源的AI样例库,以Visual ...

  6. GitHub上fork一个项目贡献代码以及同步原作者的修改【转】

    如何贡献自己的力量 首先你总得有自己的github帐号吧,注册一个,非常简单,只需用户名,邮箱,密码,邮箱只是用来找回密码的,不做验证.因此注册后立即能用!比如我现在新注册一个叫JsLouvre的示范 ...

  7. (转)大白话讲解如何给github上项目贡献代码

    转自:https://site.douban.com/196781/widget/notes/12161495/note/269163206/ 2013-03-30 22:53:55   本文献给对g ...

  8. 如何为 smartraiden 贡献代码

    如何为 smartRaiden 贡献代码 1.Fork 项目 登录 github 账号,并访问https://github.com/SmartMeshFoundation/SmartRaiden,然后 ...

  9. 大白话讲解如何给github上项目贡献代码

    本文献给对git很迷茫的新手,注意是新手,但至少会点基本操作,有点基本概念的新手,我不会从怎么用github和git是什么开始讲的.如果作为新手你看书又看不进去,原理又太复杂,又没有直接了当告诉我们怎 ...

随机推荐

  1. Aurelia – 模块化,简单,可测试的 JS 框架

    Aurelia 是下一代 JavaScript 客户端框架,利用简单的约定来激发你的创造力.凭借其强大的专注于开发经验, Aurelia 可以使您不仅创造惊人的应用程序,同时也享受这个过程.它经过精心 ...

  2. about reg

    var getR=function(str,reg){ return str.match(reg).join(""); } var a=getR("138888" ...

  3. JavaScript实战(带收放动画效果的导航菜单)

    虽然有很多插件可用,但为了共同提高,我做了一系列JavaScript实战系列的实例,分享给大家,前辈们若有好的建议,请务必指出,免得误人子弟啊! ( 原创文章,转摘请注明:苏福:http://www. ...

  4. js方法实现rgb颜色转换成16进制格式的代码的方法

    原文地址:http://www.cnblogs.com/vaal-water/archive/2013/04/08/3008880.html 自己试过很好用 function zero_fill_he ...

  5. 学习笔记:腾讯云——服务器mysql操作

    1.进入数据库 (注意:在linux系统下要进入mysql所在的文件夹下才能打开数据库) 操作1:进入到指定目录下 命令行:cd /opt/lampp/bin 操作2:进入到数据库 命令行:./mys ...

  6. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  7. RxJava 和 RxAndroid 五(线程调度)

    对rxJava不了解的同学可以先看 RxJava 和 RxAndroid 一 (基础)RxJava 和 RxAndroid 二(操作符的使用)RxJava 和 RxAndroid 三(生命周期控制和内 ...

  8. Android的进程等级

    Android五个进程等级 1.前台进程(Foreground process): 用户当前工作所需要的.一个进程如果满足下列任何条件被认为是前台进程: 正运行着一个正在与用户交互的活动(Activi ...

  9. 搭建一个完整的Android工程(一)Dagger2

    写在前面 现在越来越多的使用到了开源项目,但是仅限于使用,却不了解,更谈不上深入.也是因为越来越多的开源项目,平时工作中遇到问题也是第一时间寻找对应的开源项目,少了许多独立的思考.现在虽然能很轻松的完 ...

  10. eclipse编码格式设置

    大家好,我是小Alan,很高兴大家能够看到这篇小小的技术点文章,这还是从参加工作以来,小Alan写的第一篇博文.喜欢能够给一些朋友带来方便. 说到eclipse编码格式的设置其实一个非常非常小的事情, ...