更新
2016-02-18:添加了流程信息
我有一个使用XE4编译的Delphi程序。它被几百个客户使用。几周前,其中一位客户报告说可执行文件的某些区域在白天被随机删除(图像吼叫)。此客户端有35个站点使用此exe,问题发生在不超过10个这些站点。
研究
1 - 我的第一个怀疑是无限循环。当组件被擦除时,exe会保持响应,代码没有任何变化,因为这个问题没有发生,并且日志没有显示任何循环(这个exe文件到处都有日志)。
2 - 行为不端的帖子。我有一个单独的线程,可以在云中同步这个exe和我们的服务器之间的数据。同样,日志不会显示问题发生时线程正在运行,并且此处没有任何更改。
3 - 其他一些程序(防病毒?)正在影响我的exe。无法正确调查这个hipiquesis,但直到现在找不到任何引起我注意的安装程序。
我的问题是:可能导致此问题的原因是什么?我该如何进一步调查?我知道这可能是一个广泛的问题,但这是我可以收集的所有信息,我无法想象还有更多的地方可以看。
图片
1 - 在下图中,红色划线区域应为TToolBar
2 - 在第二个图像中有三个区域,从顶部到底部,第一个应该是TToolBar,第二个应该是子窗体的标题,第三个应该是TwwDBGrid
3 - 第三个例子在顶部显示了应该是TEdit的擦除区域,只是吼它在TwwDBGrid上应该是一条线,在侧面我们可以从TwwDBGrid看到一个擦除的滚动条< / em>的
4 - 最后一个示例显示了5个已删除的区域:应用程序的标题,主要的TToolBar,表单的标题,TButton和两个TwwDBGrid
5 - 这是一个有趣的例子,因为除了擦除的组件之外,还有4个TSpeedButton没有被删除但它们没有原始的图像(第一个红色描边区域)。其他3个红色描边区域依次为2个TEdits,一个TwwDBGrd和一个TButton
流程信息
我得到了一个问题发生的截图。 scgolr是我的软件。
答案 0 :(得分:2)
确实没有足够详细的信息给你一个明确的答案。但是,我可以回答您的问题:
我如何进一步调查?
由于你所说的:
要做的第一件事就是与客户取得联系,并获得您所说的但未获得的信息。需要回答的问题是:
有了上述内容,我不建议故障发生在这个客户及其设备或使用软件的方式上。可能只是网站上的组合与您的所有其他客户不同,会触发问题显示。
当问题发生时,您需要检查软件和站点中的某些特定事项,以及最小化时问题是否消失 - 应用程序的恢复(这表示绘画中断了问题:
Application.ProcessMessages
?Synchronize
的任何GUI组件?最后,我建议您现场拜访客户。在直接讨论中,你会得到更好,更快的答案。
收到过程信息后编辑。
关于GDI或User对象没有什么令人担忧的。但 令人震惊 当你在评论中说你在很多地方打电话给Application.ProcessMessages
时,显然是要修复&#39;无响应的用户界面。例如,如果用户双击一个按钮会发生什么情况,但是它会慢慢地让Windows检测到它是否单独点击?首次单击可能会启动您长期持续的过程,在此过程中您可以调用A.P.
从消息队列中读取第二次单击,这将启动相同的过程。现在对该过程的第二次调用运行(自己调用A.P.
)并最终结束并执行返回第一次调用。根据您在此过程中的操作,您可能会弄乱句柄和设备上下文等。一个强烈的建议表达了友好的意图:摆脱对A.P.
的调用
答案 1 :(得分:1)
正如@SebastianZ和@AlekseyK指出的那样,你可以尝试一些GDI资源(句柄?)的exaustin。 如果系统可以访问某些工具,如Process explerer或进程黑客,可以给你一些提示。此实用程序也可能有用GDIView
我不知道这是否适用于您的情况,但有时数据库数据损坏会导致运行程序产生奇怪的影响(我记得&#39;数据炸弹&#39;导致内存不足异常.. 。
因此,如果某些内容导致GDI分配循环,那么应用程序的图形会受到“奇怪”的影响。方式
答案 2 :(得分:1)
问题在于您的客户正在访问的安全插件(Warsaw - Gas Tecnologia)银行的网站,更新它并且它将被解决,问题发生在巴西