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一起使用的威力

  • 相关阅读:
    Redis安装与配置
    Mysql主从复制
    MySQL的基本使用
    如何理解 python 里面的 for 循环
    我在创业公司的 “云原生” 之旅
    linux 安装 kafka
    数据库性能优化
    Shell 中各种括号的作用
    DNS 配置实例-正反解析-主从同步-分离解析
    DHCP 中继转发配置(ensp 实现)
  • 原文地址:https://www.cnblogs.com/elvisxu/p/1874472.html
Copyright © 2011-2022 走看看