最近花了差不多1天的時(shí)間在折騰一個(gè)Bug,該Bug的表象如下:
這個(gè)Bug還特別獨(dú)特,在開發(fā)電腦中無(wú)提示,在終端用戶那里每次使用軟件的時(shí)候都報(bào)這個(gè)。仔細(xì)思考了一下最近在源碼中新添加的功能,沒(méi)發(fā)現(xiàn)有啥特別明顯的問(wèn)題。于是,根據(jù)字面意思的理解是“運(yùn)行時(shí)錯(cuò)誤”,所以一開始解決這個(gè)問(wèn)題的思路是將所有應(yīng)用程序的運(yùn)行時(shí)拷貝至應(yīng)用程序目錄。嘗試過(guò)之后,依然報(bào)這個(gè)異常。分析可能跟運(yùn)行時(shí)的動(dòng)態(tài)鏈接庫(kù)沒(méi)有關(guān)系。于是,調(diào)整解決問(wèn)題的思路,考慮將工程中新添加的代碼進(jìn)行分割。部分部分的測(cè)試新添加的代碼到底那里有問(wèn)題,排查到最后是這個(gè)函數(shù)內(nèi)部發(fā)生了異常。異常函數(shù)的代碼如下:
void CleanSerialPort() { if(g_hEvent != NULL) { CloseHandle(g_hEvent); g_hEvent = NULL; } if(g_SerialPort.IsOpen()) { COMMPROP properties; memset(&properties, 0, sizeof(properties)); g_SerialPort.GetProperties(); g_SerialPort.ClearWriteBuffer(); g_SerialPort.ClearReadBuffer