我们有一个由主机(exe)和许多包含gui等的模块(dll)组成的应用程序。
有时,应用程序在关闭时卡住。大多数情况下,它发生在通过 TestComplete 进行测试期间。我们无法在调试期间重现该行为。
我们如何找出应用程序卡住的原因?
我猜它与线程有关,但我不确定。
有什么我们应该尝试的工具或技术吗?
最佳答案
我认为好的旧伐木会对你有所帮助。为每个单元添加一些日志记录 finalization
,将此类日志记录添加到全局数据的析构函数(数据库连接、全局配置等)。当然不要破坏记录器对象。
如果您的应用程序是多线程的,则将一些日志记录添加到工作线程,例如写入“[日期]线程[类名]工作”并每隔几秒写入一次(您可以使用一些 Debug模式)。当线程发现它应该终止时,还要添加日志记录。
还可以使用一些系统实用程序,例如 ProcessMonitor、Handles、Process Explorer(全部由 Sysinternals/Microsoft 提供)。监控磁盘读取/写入、句柄计数、内存使用情况、网络连接。也许您的应用程序在退出时会在磁盘上转储一些大结构?也许它分配了很多内存并且必须释放它?
关于delphi - 应用程序在退出时卡住 - 如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122685/