2008-12-18 114 views
4

背景:我目前正在调试用C++编写的定制GUI框架上的应用程序。我已经设法锁定了大多数错误,但是我遇到的最大麻烦的错误往往有一个共同的主题。 所有这些似乎与屏幕刷新,重绘或更新匹配提供的数据。这是一个很难调试的问题,因为我无法在每次刷新时破解,而且这些东西中的大部分都是时间敏感的,所以断点偶尔会“修复”错误。在C++中调试GUI应用程序

问:有没有人有任何关于调试基于Windows的GUI的技巧,特别是关于单个组件的更新?

回答

6

我同意双显示器甚至远程调试,以减少干扰消息。

我也强烈推荐间谍工具。这些让你看到系统中正在发送什么消息。一个这样的程序是Winspector。 http://www.windows-spy.com/

+1

链接被破坏,它被重定向到一些可疑的photoshooting站点。 – Downvoter 2015-11-22 09:34:07

3

这可能没有帮助,但我发现在这种情况下使用双显示器很有用。我有一个屏幕上的调试器和另一个屏幕上的应用程序。然后,我可以直接通过代码,看到应用程序正在刷新或在其他屏幕上执行任何操作。 这样做仍然有焦点问题,但至少我可以看到它重新绘制时。

0

在调试Windows控件和用户界面的刷新/重绘问题时,拥有双屏幕确实有帮助。

在第二个屏幕上显示应用程序时,调试器不会在主UI界面上产生“invalidate”,当它断开调试断点时。

如果您不能有第二个屏幕,请尝试同时使用这两个应用程序,以便应用程序和调试程序不会发生干扰。

3

测井几乎是唯一的答案。不知道你的框架,我不能给出一个确切的答案,但基本上打开一个文件,并附加在不同的程序中的消息。最后关闭它。

在消息包括您感兴趣的变量的值。

另外使用窗口消息框是有用以查看是否在正确的分支或过程。这对整个流量影响很小。

最后尝试下载.NET的任何快速版本,并使用Winforms尝试对特别有问题的区域进行测试。虽然Winform是它自己的框架,但它的控制与Windows提供的控件之间有很高的一致性。

我保持项目水星胶囊的模拟作为轨道器空间模拟器的附加组件。它是用C++编写的,必须直接使用Win32进行一些面板和对话。有时候我开始使用VB6(后来的VB.NET)来解决一些复杂的交互问题,然后将它转换为C++中的Win32等价物。

但是,这是最后的手段。