【发布时间】:2016-05-11 04:21:56
【问题描述】:
更新
2016-02-18:添加流程信息
我有一个使用 XE4 编译的 Delphi 程序。数百名客户正在使用它。几周前,其中一位客户报告说,可执行文件的某些区域在白天被随机擦除(如下图)。此客户端有 35 个站点使用此 exe,并且出现问题的站点不超过 10 个。
调查
1 - 我的第一个怀疑是无限循环。该 exe 在组件被擦除时一直响应,从没有发生此问题并且日志没有显示任何循环(此 exe 到处都有日志)时,代码上没有发生如此根本的变化。
2 - 行为不端的线程。我有一个单独的线程来同步这个 exe 和我们在云中的服务器之间的数据。同样,当问题发生时,日志不会显示线程正在运行,而且这里没有任何更改。
3 - 其他一些程序(防病毒软件?)正在影响我的 exe。还无法正确调查这种髋关节疼痛,但到目前为止找不到任何引起我注意的已安装程序。
我的问题是:什么可能导致这个问题?我该如何进一步调查?我知道这可能是一个广泛的问题,但这是我能收集到的所有信息,我无法想象还有更多的地方可以看。
图片
1 - 在下图中,红色描边区域应该是一个 TToolBar
2 - 在第二张图片中有三个区域,从上到下第一个应该是 TToolBar,第二个应该是子窗体的标题,第三个应该是 TwwDBGrid
3 - 第三个示例在顶部显示了应该是 TEdit 的已擦除区域,在它下面应该是 TwwDBGrid 上的一条线,在侧面我们可以看到 TwwDBGrid 的已擦除滚动条
4 - 最后一个示例显示了 5 个已擦除区域:应用程序的标题、主 TToolBar、窗体的标题、一个 TButton 和两个 TwwDBGrid
5 - 这是一个有趣的例子,因为除了被擦除的组件之外,还有 4 个 TSpeedButtons 没有被擦除,但它们没有原来的图像(第一个红色描边区域)。其他 3 个红色描边区域依次是 2 个 TEdit、一个 TwwDBGrd 和一个 TButton
流程信息
我在问题发生的那一刻得到了一个屏幕截图。 scgolr 是我的软件。
【问题讨论】:
-
我猜是显卡和驱动程序的问题。众所周知,工具栏对这些东西很敏感。
-
表单显示时缺少组件?程序是否运行良好,直到突然所有新表单都开始失败?也许您有一些内存或资源泄漏,并且正在耗尽一些 Windows/GDI 资源。验证您是否在关闭时正确释放表单。
-
您已经在任务管理器中打开了进程选项卡。请使用
View(Exibir) ->Select Columns选择列GDI Objects和User Objects。按这些列排序,看看是否有过度使用这些对象。 -
您的程序被 几百 个客户使用。 一个客户在不到三分之一的网站上发现了这个问题。由于问题非常明显并且工作流程中断,我相信如果这是一个普遍问题,其他客户会与您联系。因此,原因的关键是在那些已经看到它的地方找到。此外,该问题发生在今年年初的一个相当具体的时间范围内(几周前)。 IMO 的第一步是澄清当时发生了什么变化? ....
-
(继续)硬件、网络、服务器、操作系统、其他软件。不要忘记,您的软件是如何使用的。真的在那个时候改变了什么。要检查的列表很长,目的是为那些发现问题的少数站点找到共同的变化?更改本身可能是实际原因(例如不兼容的硬件),或者它可能只是触发了您的软件的弱点。一旦你知道是什么让问题浮出水面,它就会大大减少搜索量。
标签: delphi