您如何登录桌面应用程序以提高稳定性?

时间:2011-07-18 05:19:58

标签: delphi logging desktop-application

我开始在我的Delphi应用程序中使用SmartInspect,因为我的用户遇到了我无法在我的机器上重现的错误/问题。当我对问题有一个总体概念时,我将在几个特定的​​地方监控应用程序,以确认哪些是有效的或哪些无效。

当虫子没有明显原因时,我感到迷茫。我不知道从哪里开始登录以缩小问题范围。是否有使用记录器的常用技术或最佳实践?

SmartInspect似乎非常强大,但我不知道要记录什么或如何组织我的日志,因此数据对于捕获错误是有意义和有用的。

注意:我正在使用SmartInspect,但我认为答案应该适用于任何日志包。

3 个答案:

答案 0 :(得分:10)

以下是我尝试在my own OpenSource logging unit中实现的一些指南,但它非常通用,正如您所说,它应该适用于任何日志包:

  • 制作多个级别(我们使用集合)的日志记录,以调整所需的日志记录信息;
  • 记录所有异常,甚至是带有try...except块的处理异常 - 并添加一个不值得记录的异常类列表(例如EConvertError) - 例如我们的单元能够通过全局异常“hook”记录所有异常(在代码中添加try..except),并处理要忽略的异常类列表;
  • 记录所有“致命”错误,例如数据库连接问题或错误的SQL语法 - 应该通过“记录所有例外”前一项来完成;
  • 对于此类例外,请记录堆栈跟踪以了解调用上下文;
  • 能够记录所有SQL语句或数据库访问;
  • 添加通用用户界面日志记录,以了解用户触发的软件的哪些主要功能(例如,对于每个工具栏按钮或菜单项):用户说'我在屏幕/报告上有这个,这是很常见的,但我没有做任何事情......当你看到日志时,你会发现“任何事情”已经完成了。 ;)
  • 监控应用程序的主要方法及相关参数;
  • 日志记录是一项不断发展的功能:使用上述一般规则,然后根据您的调试需求调整您的实验日志。

答案 1 :(得分:2)

对于UI驱动的应用程序,这里是我首先考虑的主要内容:

  1. 动作执行时ActionManager或ActionList的事件(给我点击这里的用户然后点击此处列表)。

  2. 未处理的使用JCL调试回溯的异常在我的主日志中正确,而如果我使用的是MadExcept或EurekaLog,则异常会有自己的日志。

  3. 后台线程启动,停止和重要历史事件

  4. 警告,错误,API函数失败,文件访问失败,处理(捕获)异常。

答案 2 :(得分:-1)

当前内存使用量对于长时间运行的进程非常有用,可以查看是否存在内存泄漏(可能会在某天导致内存不足错误)。