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

  • 相关阅读:
    Key ssd_300_vgg/block3_box/L2Normalization/gamma not found in checkpoint的解决方案
    微调(Fine-tune)原理
    TensorFlow的数据读取机制
    卷积神经网络CNN识别MNIST数据集
    TensorFlow基本计算单元与基本操作
    一些小软件闪退的解决方案
    机器学习之SVM调参实例
    机器学习之支持向量机算法(二)
    机器学习之支持向量机算法(一)
    机器学习项目实战----新闻分类任务(二)
  • 原文地址:https://www.cnblogs.com/elvisxu/p/1874472.html
Copyright © 2011-2022 走看看