文章目錄
- 問題現象
- 原因分析
- 節目id和節目路徑映射關系
- uuid資料
- 流程分析
- 發包機
- 解決辦法
- 感悟
問題現象
發包機 結果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倍甚至更大的代價來彌補,然而,時光一去不復返,
技術是一面人性的照妖鏡,在它面前,你就是你,來不得半點虛假,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/205733.html
標籤:python
