全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2980
推到 Plurk!
推到 Facebook!

程式運作到一半莫名其妙當機

缺席
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-14 12:21:53 IP:61.67.xxx.xxx 未訂閱
請問各位
我有一支程式運作中, 使用者進入系統操作後, 不特定的時間中, 可能使用者輸入了一些資料(StringGrid), 停了好一會再繼續操作, 或者使用者完成了StringGrid內容, 開始執行我設定的一連串運算及資料儲存到資料庫的流程後, 再重新開啟一個新的StringGrid重覆上述作業時當機(有時做兩次就會, 有時做四五次才會), 我懹疑是記憶體管理上出問題, 但追查各應該釋放或free的階段都有確實執行, 實在查不出其他可能原因, 不知各位有沒有類似的經驗且解決的
我的當機狀況是, 作業完全停擺, 無法輸入任何資料, 一動視窗就出現沒有回應錯誤, 只要將該程式強制關閉再開啟又可以正常運作, 強調一點客戶的電腦沒有任何中毒現象, 而且是不只一台電腦有這個現象, 很多台只要執行這支程式都有發生過
作業系統 XP PARADOX 7 DBFILE INTERBASE(FIRBIRD 1.5X)
謝謝!
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-14 12:33:13 IP:218.170.xxx.xxx 訂閱
一般發生 "一動視窗就出現沒有回應錯誤" 的現象, 多半是程式進入了無窮迴圈所致
請檢查程式迴圈的部份看看

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-15 11:43:35 IP:61.67.xxx.xxx 未訂閱
感謝boson兄回應, 但boson兄可能沒有看清楚我的描述, 重點是在客戶一段時間停滯不用, 再來又要在StringGrid輸入資料時 此時作業就完全不動, 沒有反應了, 如果是迴卷的問題, 我就實在不用傷筋了, 謝謝!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-15 20:52:00 IP:61.31.xxx.xxx 訂閱
有沒有可能是記憶體不足!如果資料筆數很多。
用Memproof 檢查一下記憶體及指針釋放或佔用的情形。

至於一動視窗就沒回應,這是正常的。GDI繪圖有優先處理權,若程式滿載就會出現沒有回應。

可能需再進一步測試哪一段出問題得知。
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-17 15:21:58 IP:60.248.xxx.xxx 未訂閱
這時候user的cpu使用量是多少?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-17 21:55:28 IP:61.67.xxx.xxx 未訂閱
5%
並沒有100%, 我查過
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-17 22:05:02 IP:61.67.xxx.xxx 未訂閱
我也曾懷疑過, 但發生狀況前, 有時只有處理一筆, 有時會有百來筆倒不一定, 我發現重點在幾乎都是在StringGrid停頓一陣子不使用時, 當再度動滑鼠或鍵盤就會有此狀況, 在此在特別強調幾個重點
1.不是只有一個客戶電腦會發生(這套系統的用戶大約有300百家, 但有1/3會發生)
2.也不是網路連線問題, 因為有單機用戶也會發生
3.也不是螢幕保護程式問題, 因為我們都不設定, 也強烈要求客戶不得安裝
4.也不是省電問題, 所有xp好心設定的省電功能(包含螢幕, 硬碟, 網卡), 我們都關閉或設永不
5.power也都不使用具有智慧節電功能
6.所有pc都有接ups穩壓, 可能有人懷疑ups老舊, 但有些新機到貨使用也會, 也非都是同一家製造
7.再來的可能出問題部份我們就不知道了
8.如果有那位前輩願意幫我們找到原因且能改善或解決, 我們願意致上酬金表示感謝
在此先向站長致歉, 利用這個版面做了一點商業利益的交換, 我下次不敢了~~~~
===================引 用 wameng 文 章===================
有沒有可能是記憶體不足!如果資料筆數很多。
用Memproof 檢查一下記憶體及指針釋放或佔用的情形。

至於一動視窗就沒回應,這是正常的。GDI繪圖有優先處理權,若程式滿載就會出現沒有回應。

可能需再進一步測試哪一段出問題得知。
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-04-18 11:07:16 IP:60.248.xxx.xxx 未訂閱
問題有點棘手
是不是StringGrid問題?
可用您的程式切割成一小塊,針對StringGrid這一部分是否有問題去做大量測試?

>有時只有處理一筆, 有時會有百來筆倒不一定,
>我發現重點在幾乎都是在StringGrid停頓一陣子不使用時, 當再度動滑鼠或鍵盤就會有此狀況, 在此在特別強調幾個重點
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-18 11:43:26 IP:211.75.xxx.xxx 未訂閱
1. 版大是否有用到 Thread 呢
2.是否能把 Source 貼出來呢, 與其亂猜倒不如實際來看看
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-04-18 16:32:08 IP:61.67.xxx.xxx 未訂閱
1.並未用到THREAD
2.SOURCE有10來支PAS, 主程式碼也有近5000行CODE, 全PO實在很難看的懂, 其中我們自己開發的THIRD PARTY元件及工具也不少, 基本上要各位查真的很難, 我只希望有類似狀況發生的經驗, 可以提供我一個方面, 或者我們可以當面討論
3.程式碼屬於公司, 未獲准我無法公佈, 抱歉!
===================引 用 Jasonwong 文 章===================
1. 版大是否有用到 Thread 呢
2.是否能把 Source 貼出來呢, 與其亂猜倒不如實際來看看
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-04-18 17:43:13 IP:61.222.xxx.xxx 訂閱
>我發現重點在幾乎都是在StringGrid停頓一陣子不使用時, 當再度動滑鼠或鍵盤就會有此狀況
難道一直動滑鼠與鍵盤就不會有此問題嗎!

>也不是網路連線問題, 因為有單機用戶也會發生
是不是有網路阻塞。不清楚您處理單機用戶,也會執行連線嗎

>沒有回應
可能是Windows 訊息阻塞,系統會發一個 WM_NULL 若程式沒有回應。就...

我想想!
1. StringGrid 不可能會有問題,因為我用了7,8年也沒問題。
2. StringGrid 是否是有繼承。是否有些元件訊息處理不正確。尤其是來路不明的THIRD PARTY元件。!@#$
3. 是不是有什麼 SetEvent 動作導致。

暫時想到這裡
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-04-18 18:06:28 IP:61.67.xxx.xxx 未訂閱
勞動各位版主出面, 真是不好意思, 我想透過版面討論很可能會看不出端倪, 而這是客戶端引發, 我在現場從來也沒遇到過, 所以麻麻煩就在這裡, 至於客戶那邊是如何操作, 說實在話我們也不清楚來龍去脈, 我們的工程師也在現場想瞭解, 但這並不容易, 除非一直在那邊站台, 我會再持續觀察狀況, 不過版主提到window訊息阻塞這點, 我倒是蠻有興報了解, 是否有什麼方式可以在阻塞時觸發其一事件去除錯, 這點我並不了解, 請版主提供一些資訊, 謝謝!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-04-18 20:34:49 IP:219.86.xxx.xxx 訂閱
這個問題,看來是很難處理的。未知的因素太多。
首先訊息列阻塞時觸發,看來是行不通的。
一來Windows 訊息何止千萬,二來用WndProc或onMessage 雖然可以記錄並判斷訊息狀態。
但似乎是不太穩定的作法。...且太累了太多訊息無從判斷...

>我發現重點在幾乎都是在StringGrid停頓一陣子不使用時, 當再度動滑鼠或鍵盤就會有此狀況
事實的狀況,應該是程式擺了一段時間,就當掉了。

幾點建議:
1.是否有一些事件(onChange 又觸發onChange...)或Timer導致。
2. 是否可添加一些 DEBUG 代碼,寫下事件簿。輔佐調查...
3. 若真為訊息阻塞,用
SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS);// REALTIME_PRIORITY_CLASS
看看能否改善。此舉有點碰碰運氣之嫌...

看來又是一個長期抗戰DEBUG 的痛苦時期。good luck !!!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-04-18 21:04:30 IP:61.224.xxx.xxx 未訂閱
要確定某個Window是否仍然有接收訊息,可以用spy/winsight 工具去trace看看
要是連UI都不回應的話,可能是卡在某個死迴圈吧?
不過真的是太多因素了,得一個個切割成一小塊一小塊debug
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-04-24 02:53:55 IP:61.67.xxx.xxx 未訂閱
暫時先結案, 如果各位有更好經驗方法, 誠請發簡訊給我, 謝謝!
系統時間:2024-07-02 4:48:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!