zoukankan      html  css  js  c++  java
  • 这两天里发生的几件事儿

      这周发生了几件事情,让我对于程序有了新的认识,记录一下:

    1.客户端造成的全服崩溃

      在协议中处理字符串时一定要小心再小心。自己写的一个超链接系统接口,在处理超链接字符串参数时,没有充分考虑到异常情况的处理,导致了崩溃,代码大意如下:

      void DealStrFromProtocol(std::string str)

      {

        UINT begin = str.find(key1, 0);      // key1表示所要找的关键字1

        assert(begin != std::string::npos);

        ...

        UINT end = str.find(key2, begin);     // key2表示所要找的关键字2

        assert(end != std::string::npos);

        std::string newStr = str.substr(begin, end);  //此处在发布版本中是非常危险的,因为assert不起作用了

        ...            

      }

      鉴于此,将代码做了容错处理,并打了日志,修改后如下:

      void DealStrFromProtocol(std::string str)

      {

        UINT begin = str.find(key1, 0);      // key1表示所要找的关键字1

        assert(begin != std::string::npos);

        if (begin == std::string::npos)

        {

          LogPrintf("协议字符串异常:%s", str.C_Str());

          return;

        }

        ...           

      }

      本以为ok了,可是悲剧再一次发生了,崩溃在最不该发生的情况下出现了,当时我都想人间蒸发。。。

      原因是我信任了LogPrintf接口,此接口对于异常的字符串没有做好容错处理,导致了再一次崩溃。

      一般在接收处理服务器广播的字符串时,处理一定要谨慎,不然就可能出现客户端全服崩溃。

      

    2.windbg在发布版本中跟到的堆栈不可全信

    3.关于hash表和vector一起使用的威力

  • 相关阅读:
    js 常用正则表达式
    深度学习
    开通自动订阅功能前:输入银行业务信息
    VUE学习九,生命周期
    Setting Windows server firewall by powershell
    Install iis web server using powershell
    转 FAL[server, ARC3]: FAL archive failed Error 16401 creating standby archive log file at host
    springboot admin 监控
    二进制手指计数法
    SpringBoot集成Swagger-Bootstrap-UI
  • 原文地址:https://www.cnblogs.com/elvisxu/p/1874472.html
Copyright © 2011-2022 走看看