你的问题太模糊了。如果您不知道要归咎于您正在使用的各种组件中的哪一个,那么您修复它的希望为零。最有可能的是您做错了什么,或者您不了解这些组件的工作原理。我非常怀疑这纯粹是组件本身的错误,但是,嘿,无论哪种方式,都取决于您找出问题所在,并解决问题。
您创建的死锁或正在发生的深层进程损坏问题可能会阻止 MadExcept 向您提供任何信息,但值得一试。
要找出哪个是冻结的,如果有的话,那么 madexcept 评论是最好的建议。它将超时(在可配置的秒数之后)并为您引发人为异常,从而中断您挂起的过程。这适用于用户代码,以及线程在 Win32 或内核函数中被阻塞的地方。例如,您可能已将 Indy 设置为无限超时,因为这是 Indy 10 中这些天的默认设置,并且您遇到的是与超时相关的冻结,您希望完成但从未完成的网络活动将完成,导致您的程序“挂起”。这里的解决方法是改变你的超时。
但是,在您弄清楚问题出在哪里之前,我怀疑您是否能够解决它。所以,为此,Marcus 是对的,你应该调查 madExcept。没有它我活不下去。
其次,你真的应该在你的程序中添加跟踪逻辑,这样你就知道它的去向以及在它出现问题之前它在做什么。如果你真的需要帮助,你可以试试 Raize 的 CodeSite。就我个人而言,我发现OutputDebugString
结合免费的 MicrosoftDebugView
实用程序(以前来自 SysInternals)工具足以在客户端计算机上调试此类问题。
任何具有后台线程但没有跟踪日志记录的程序都是设计不佳的程序。哎呀,任何可能失败或有问题的重要单线程应用程序都需要跟踪日志记录。
即使 MadExcept 或其他异常工具没有帮助,日志记录总是会有所帮助。尽管 CodeSite 也很受欢迎,但 Trace-Logging 通常是一个自己动手的解决方案。