你的問題太含糊。如果你不知道你所使用的各種組件中哪一個是你想要指責的,那麼你沒有希望修復它。最有可能的是你做錯了什麼,或者你不明白這些組件是如何工作的。我非常懷疑,這純粹是組件本身的錯誤,但是,無論如何,無論是哪種方式都可以找到有什麼問題,以及解決問題的工作。
您創建的僵局或發生的深層過程損壞問題可能會阻止MadExcept向您提供任何信息,但值得嘗試。
要找出哪一個是凍結的,如果有的話,那麼madexcept的評論是最好的建議呢。它會超時(在可配置的秒數之後),併爲您提供一個人爲的例外,從而中斷您的掛起進程。這適用於用戶代碼,以及在Win32或內核函數中阻塞該線程的位置。例如,您可能已經爲Indy設置了無限超時,因爲這是Indy 10中的默認設置,並且您所遇到的是超時相關的凍結,您希望完成的網絡活動,但永遠不會將完成,導致你的程序「掛起」。這裏的治療方法是改變你的超時時間。
但是,直到你找出問題所在,我懷疑你能解決它。所以,爲此,馬庫斯是對的,你應該看看madExcept。沒有它,我無法生活。其次,你應該真的在你的程序中添加跟蹤邏輯,所以你知道它在哪裏發生了什麼,以及它在出現問題之前做了什麼。如果你確實需要幫助,你可以試試Raize的CodeSite。就我個人而言,我發現OutputDebugString
與免費的微軟DebugView
實用工具(以前來自SysInternals)工具相結合足以在客戶端計算機上調試這些問題。
任何程序後臺線程沒有跟蹤記錄,是一個設計不好的程序。哎呀,任何可能失敗或有問題的非平凡單線程應用程序都需要跟蹤日誌記錄。
即使MadExcept或其他異常工具沒有,日誌記錄也會幫助您。跟蹤記錄通常是一個自己的解決方案,儘管CodeSite也很受歡迎。
看看madshi的[madExcept](http://madshi.net/madExceptDescription.htm)。它將允許您的應用程序或您的用戶發送整個堆棧跟蹤並檢測掛起的主線程。任何其他掛起的線程,你應該能夠編碼。 – 2012-08-15 16:49:02
有關處理線程中的異常的信息,請參見[Delphi線程異常機制](http://stackoverflow.com/q/3627743/576719)和[如何處理TThread對象中的異常](http://edn.embarcadero.com /條/ 10452)。 – 2012-08-15 16:49:52
@LURD在線程中處理異常有什麼特別之處?當然,任何線程,主線程或工作線程的異常處理都是一樣的? – 2012-08-15 18:22:19