台灣最大程式設計社群網站
線上人數
2986
 
會員總數:243667
討論主題:188258
歡迎您免費加入會員
討論區列表 >> C# >> Debug技巧求助
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Debug技巧求助
價值 : 30 QP  點閱數:371 回應數:2

樓主

smith
門外漢
0 5
97 4
發送站內信

用的是C# 出現一個很奇怪的BUG
程式基本上都有正常執行 但卻有機率會失敗 大概15%左右
"由於發生問題,導致程式停止正常運作,當有解決方案可用時,您將收到通知"之類的錯誤通知
(語系是德文簡單翻譯就像是中文語系的這個問題,就是常見的那種沒有回應的錯誤訊息)
然後只能重開之後就正常了 除非15%又被觸發不然基本上沒什麼異常
用過try catch 去捕捉問題但是都不會觸發就像是以下程式
程式碼有點多 就稍微省略一下只講問題所在

void timer_Tick() //1秒觸發一次
{

try
{
Check();
textBoxError.text +="B";
}
catch
{
MessageBox.show("timer Error");
}

}
void Check()
{

try
{
//---省略處主要功能為溝通設備並顯示設備資訊-----
textBoxError.text +="A";
}
catch
{
MessageBox.show("Check Error");
}

}

機率性觸發錯誤時候並不會顯示catch的message 然後Error的文字方塊也只顯示"A"
而顯示的設備資訊跟上次正常執行的數據一模一樣
在主機上編譯模式運作完全沒問題所以也沒有辦法觸發例外狀況 只有把整包執行檔丟到其他機器才有機率出現問題
所以想問一下像這種狀況有沒有其他能夠捕捉錯誤的函數就像是try catch那種可以幫助我Debug
因為出錯的地方實在很詭異就只是函數結束跳到進行下一個函數就失敗了

搜尋相關Tags的文章: [ C# ] , [ Debug ] , [ visual studio ] , [ Windows8 ] , [ Error ] ,
本篇文章發表於2018-01-16 21:40
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小魚
檢舉此回應

本篇文章回覆於2018-01-17 00:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
問題大概是在 【timer 每1秒持續執行 Check();】

原則上你的環境在1秒內可以完成Check...(溝通設備並顯示設備資訊)

但你的環境在某些偶發狀況下, 會超過1秒,
以致於你還在【溝通設備並顯示設備資訊】的期間, 又再一次的要求【溝通設備並顯示設備資訊】

然後就直接被硬體卡死了??...

=================

加個flag參數試看看,
例如 bool isChecking = false;

執行check前判斷isChecking,如果執行中就不再執行(等下一輪)

要執行check時先設定isChecking = true;
check執行完才設定isChecking = false;

也許可以避開這一類的問題

本篇文章回覆於2018-01-17 11:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.