一个bug引发的人生感悟

问题现象

发包机 结果csv文件,不同progid指向同一视频路径问题
在这里插入图片描述

原因分析

节目id和节目路径映射关系

设计上,使用uuid作为节目id,然后与节目路径生成一一映射,保存在std::map<std::string,std::string>中,所以理论上不会出现多对一。

uuid数据

UUID是一个16字节的二进制数据,通过uuid_unparse()将UUID装换成可读的字符串(36字节)。例如,“00a14a12-a6c2-4484-93f4-c6bcd58efa70”。注意:UUID的二进制原始数据 和 转换后的可读字符串

流程分析

发包机

发包机对progid的处理可以概括为

步骤1:建立progid-视频路径的映射表

步骤2:接收收包机的progid,从映射表中找到progid对应视频路径

步骤1:映射表创建的实现

std::map<std::string, std::string> progid_filename;

char ac_str[64] = {0};
char uuid[16] = {0};
uuid_generate((unsigned char*)uuid);
// 问题就出现在这一句
// 将uuid的二进制数据作为映射表的progid
progid_filename.insert(std::pair<std::string, std::string>(uuid, file_name));

将UUID的二进制数据装成std::string,会出现数据异常,UUID中的二进制数据被当作字符串处理,由于二进制数的随机性,就可能会导致string(uuid)数据的随机性。如下图所示:
在这里插入图片描述

解决办法

std::map<std::string, std::string> progid_filename;

char ac_str[64] = {0};
char uuid[16] = {0};
uuid_generate((unsigned char*)uuid);
// 将uuid的unparse后的字符串作用映射表的progid
uuid_unparse((const unsigned char*)uuid, ac_str);
progid_filename.insert(std::pair<std::string, std::string>(ac_str, file_name));

感悟

虽然问题解决了,但是在定位这个问题的过程中,花费了大概5小时的时间。这是自己内心不可接受的地方,复盘了一下自己定位问题的过程,虽然最开始就是先从源头开始查找问题原因,检查步骤1中创建的映射表是否正确,虽说思路是对的,但是在具体执行过程中出现了一些偏差,导致得到了步骤1的结果是正确的错误结论,使得将自己的查找重心放到其他地方,而南辕北辙,浪费了时间。在和小辉辉(我同事)分享这个事情的经过时,他说到:你就是懒呗。看似无心的一句话,却引起了我的反思,的确,就是因为懒,懒得再写几行调试代码,没有将创建完的映射表,直接打印看看。如果这样的话,可能5分钟就能定位到问题了,效率提高60倍,难道不香么!

定位bug是一个综合性的梳理过程,凭借着自己的知识、技能、经验,验证每一个步骤的正确性,如果某一个步骤的结论误认为正确,会导致后面步骤的验证全是白费,一定要遵从客观规律。而这个过程,我似乎也能读到人性,读到人生,我是觉得,人的一生一直伴随着和自己的内心深处的惰性做抗争,人生的每一个阶段就是一个步骤,如果因为懒惰或者妄想,不能验证好每一个步骤,可能就需要花费60倍甚至更大的代价来弥补,然而,时光一去不复返。

技术是一面人性的照妖镜,在它面前,你就是你,来不得半点虚假。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sif_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值