云社区 > 云博客 > 博客详情
云社区 > 云博客 > 博客详情

“坑与抗坑”---我们要做个有“素质”的程序猿

寻水的鱼 发表于 2018-05-10 15:07:4505-10 15:07
寻水的鱼 发表于 2018-05-10 15:07:4505-10 15:07
0
1

【摘要】 产品代有这样的一段代码:1、定义了一个定时任务的注册列表: std::list<software_object*> _software_object_list; std::list<software_object*> _software_object_list;2、线程以固定的周期调用、执行列表中注册的定时任务 std::list<software_object*>::i...

IMG_2413.JPG

产品代有这样的一段代码:


1、定义了一个定时任务的注册列表:

     std::list<software_object*>  _software_object_list;  std::list<software_object*>  _software_object_list;


2、线程以固定的周期调用、执行列表中注册的定时任务

    std::list<software_object*>::iterator iter;
    for (iter = _software_object_list.begin(); iter != _software_object_list.end(); ++iter)
    {
         (void)(*iter)->check();
    }


3、需要新增定时任务,如下方式注册

    

    obj = new TIMER_TASK_A(this);
    if(obj == NULL)
    {
        return false;
    }
    _software_object_list.push_back(obj);

    obj = new TIMER_TASK_B(this);
    if(obj == NULL)
    {
        return false;
    }
    _software_object_list.push_back(obj);

   //新增其它的定时功能TIMER_TASK_new在此注册。


4、看似很简单的机制,于是小H同学,在结尾处增加了一个xiao_h_new_add_timer定时任务册,并验证该任务功能正常,就去happy了。

    obj = new TIMER_TASK_B(this);
    if(obj == NULL)
    {
        return false;
    }
    _software_object_list.push_back(obj);

    obj = new xiao_h_new_add_timer(this);

    if(obj == NULL)
    {
        return false;
    }
    _software_object_list.push_back(obj)
;


5、XXX天后,TIMER_TASK_B功能受损,查看日志及代码,系统中竟有这样的一处特殊处理:

    

      if (pFrame->GetCmdCode() == GET_TZ_INFO_CMD)
      {
            TIMER_TASK_B* pTZ_monitor = dynamic_cast<TIMER_TASK_B*>(_software_object_list.back());
            if(NULL == pTZ_monitor)
           {
                  log_major("The last**_object is not TIMER_TASK_B!");
                  return;
           }
          pTZ_monitor->set_tz(pFrame);
     }


6、  额,你可以注册新增定时任务,但是只能在中间注册, TIMER_TASK_B 必须放在最后,添加TIMER_TASK_B 特殊处理的程序猿,不舍得新增变量、   (亦或有更高的构思),但是又担心将别人坑的太惨,于是在遥远的地方增加了这样的一行日志,  log_major("The last**_object is not TIMER_TASK_B!");


7、很不幸,小H同学在茫茫志(日志)海中,没有抓住这最后一颗救命稻草(log_major("The last**_object is not TIMER_TASK_B!");


8、怪谁呀?


     坑的教训:我们要做一个有“素质”的程序猿,不想被坑,但也不要给别人挖坑。

     抗坑的教训:同学,不要只关注自己功能,记得还要要看周边功能及系统中是否有新增的异常日志,其它诸如”战战兢兢如履薄冰“无需再提。


作者|韩小光      


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享文章到微博
分享文章到朋友圈

相关文章


评论(0)


0/1000
评论

登录后可评论,请 登录注册

评论
温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消