一個L引起的慘案

前情簡介

事情是這樣的,公司有個比較老的SDK庫,在我進公司三個月以後就交由我來維護了,因而呼我就勤勤奮奮的扛起了這份神聖手動黑人臉的職責。這個SDK主要是跟向APP提供後臺的服務,相似這樣的:bash

SDK的工做角色

APP須要向server上傳本身的Capability(App能支持的功能項,每一個APP可能不同)。而這個APP是一個long型,每個Bit表示一個功能項。spa

63 62 61 ··· 5 4 3 2 1 0

祖傳代碼裏是這樣寫的:日誌

public final static long CAP_0 = 0x01;
public final static long CAP_1 = 0x01 << 1;
public final static long CAP_2 = 0x01 << 2;
···
···
···
public final static long CAP_31 = 0x01 << 30;
複製代碼

我接到的需求就是這樣,提供後臺新增的Capability,因而我就沒動腦子寫出了下面的代碼:code

public final static long CAP_0 = 0x01;
public final static long CAP_1 = 0x01 << 1;
public final static long CAP_2 = 0x01 << 2;
···
···
···
public final static long CAP_31 = 0x01 << 30;
public final static long CAP_31 = 0x01 << 31;
public final static long CAP_32 = 0x01 << 32;
public final static long CAP_33 = 0x01 << 33;
複製代碼

事情就是這麼個事情,狀況就是這麼個狀況!cdn

案件偵破

SDK的使用者,某APP開發(其實這個需求就分給我了)死活和後臺調不通,現象就是若是APP正確上報某個Capability,點擊APP上的按鈕,會向server發出命令請求,實際是server一直報錯。server

按理說,這個事情只要後臺告訴我具體是什麼錯誤,也是很容易查出來的。然鵝...,日誌上顯示 error msg: deviceId not found ,咱們的公司後臺在臺灣,溝通起來特費勁,so我就一我的默默的排查...,朝着deviceId not found這個方向去查了。。。。blog

我:deviceId我有傳呀,怎麼仍是這個錯誤?
大佬:是否是,deviceId中途被改動了?
我:我去追蹤一下看看。
……
我:deviceId是正確。
大佬:那你找臺灣的後臺看看吧。。
我:哦,我再看看吧。。
複製代碼

就這樣過了許久...,咦,等等,這個capability怎麼是負的...,😯😯,內心一萬隻喜洋洋飄過。 改代碼:開發

public final static long CAP_0 = 0x01L;
public final static long CAP_1 = 0x01L << 1;
public final static long CAP_2 = 0x01L << 2;
···
···
···
public final static long CAP_31 = 0x01L << 30;
public final static long CAP_31 = 0x01L << 31;
public final static long CAP_32 = 0x01L << 32;
public final static long CAP_33 = 0x01L << 33;
複製代碼

案件總結

嗯,細節戰勝愛(cheng)情(xu)啊(yuan)!it

你能不能來找我一下,我準備了酒,也準備了故事!372702757io

相關文章
相關標籤/搜索