乙個失誤引發的奇怪執行緒BUG

2021-06-19 00:25:31 字數 990 閱讀 7707

今天客戶反應之前做的乙個專案中,有乙個功能時能時不能,於是按照描述,在自己電腦上進行了相應的測試,可是發現問題難以重現。後來按著客戶的環境開了個虛擬機器(xp sp3)進行配置,問題重現了。

可是在自己電腦上(win7 64)卻不會出現。難道是系統引發的問題?可是依據專案以前的案例,在xp上執行是ok的。那這是什麼原因?思來想去,只得開啟**,挨個查詢,最後把可能的地方都一一作了調整,並輸出日誌,發現問題集中在了乙個資料通訊的執行緒中。

這個執行緒有開啟,但是不進入迴圈,結果是一進去就退出來了。下面是部分**

private void start()

);

if (!communicatethread.isalive)

runthread_ = true;

}private void communicate()

}

不進入迴圈,那必然是迴圈標誌的問題。按著**,定位到了runthread=true,猛然發現,這個標誌放在了communicatethread.start()之後了,於是立即將標誌調整,修改後的**如下

private void start()

);

if (!communicatethread.isalive)

}private void communicate()

}

編譯執行,程式正常運轉了。這是runthread_標誌設的位置不合適引發的bug,是一種編碼失誤。

問題至此是解決了,可是卻引發了新的思考。為什麼在我的電腦上沒問題,在虛擬機器上有問題?於是將runthread_還原到原來有bug時的位置,在communicate中輸出。在兩個環境中得到的值完全不同,在我的電腦上是runthread_=true,在虛擬機器上是runthread=false.這進一步確定了原來bug的原因,但這是為什麼會這樣?

想起一句牛人的經典話語:解決了問題,卻不知道問題產生的原因。

乙個奇怪的BUG

場景 兩個程序,子程序顯示一視窗,每次初始時,需要將子程序視窗銷毀後,再重新建立 其中,出現了這樣的bug,測試時出現了兩個子程序視窗,其中乙個不受程式控制 流程 nim chatroom chatroomform pchatform new chatroomform this pcurchatfo...

android 乙個奇怪的bug

今天做乙個android例子,程式本來執行好好的,可是後來不知道為什麼會有這個異常,具體如下 我 layout.xml檔案裡,有乙個linearlayout android id id serinfoll 當我在activity裡,用 linearlayout findviewbyid r.id.s...

乙個bug引發的感想

上周五,系統出現乙個bug。基本描述如下 b功能上傳乙個到 b路徑 a功能要獲取b路徑的,但是獲取路徑寫錯了,寫成了a路徑。線上突然出現此問題,訂單無法完成。該功能用到的頻率還比較大。無法馬上布版本。首先的想法想通過改資料來解決,但是發現不行。資料是動態的,不能改,也改不過來。其次的想法 新增b路徑...