我有一个奇怪的问题,我一直无法诊断,希望有人至少能指出我正确的方向。我有一个 C++ MFC 应用程序,它从各种来源收集数据并将其显示在屏幕上。然而,在随机间隔(通常大约 5-10 分钟)之后,显示器以我从未见过或能够追踪到的方式“损坏”,如下图所示(左边是正常的,右边是损坏的):
基本症状是:
- 向上/向下箭头图像变成“5”和“6”。
- 打开组合框列表只会显示项目文本(未显示列表边框和滚动条)。
- 某些控件上的背景颜色无法正确更新或显示。
- Z-order 被破坏,应用程序控制通过放置在顶部的其他窗口“泄漏”。
- 在应用程序处于焦点时按 Print-Screen 不再将窗口捕获到剪贴板。
- 关闭和重新打开窗口什么都不做。
- 重新启动应用程序会使事情恢复正常。
我试图消除的可能原因包括:
- 操作系统和计算机:从 Windows 7-64 位到 Windows Xp-32 位的各种系统都存在同样的问题。
- 多线程:我添加了一个互斥锁以防止同时发生显示更新,但它没有效果(如预期的那样)。
- 内存损坏:这一直是我的假设,但根本没有内存损坏的迹象。基本显示代码已使用多年,没有类似问题以及基本网络消息库。
- 特定代码:我已将问题缩小到一个特定对话中的各种其他显示没有问题的对话。它们都使用相同的基本代码,这似乎表明问题在于对话框的特定显示代码。到目前为止,问题发生的具体方式或原因一直困扰着我。
关于原因可能是什么或如何缩小范围的任何想法都会很棒。
更新 1: 做一些更多的计时/可重复测试,看起来让这个对话框运行一会儿会导致问题。在问题出现之前,时间量始终在 300-400 秒之间。