繁体   English   中英

用C ++调试GUI应用程序

[英]Debugging GUI Applications in C++

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

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

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

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

这可能没有帮助,但我发现在这种情况下使用双监视器非常有用。 我在一个屏幕上有调试器,在另一个屏幕上有应用程序。 然后,我可以逐步执行代码,看到应用程序刷新或在其他屏幕上执行任何操作。 以这种方式关注焦点仍然存在问题,但至少我可以看到重绘的时间。

记录几乎是唯一的答案。 在不知道您的框架的情况下,我无法给出确切的答案,但基本上打开一个文件并在各种感兴趣的程序中附加消息。 最后关闭它。

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

此外,使用消息框窗口可以查看您是否在正确的分支或过程中。 这对所有流量的影响最小。

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

我维护了Project Mercury Capsule的模拟,作为Orbiter Space Simulator的附加组件。 它是用C ++编写的,必须直接使用Win32来实现一些面板和对话框。 曾经有一段时间我启动了VB6(后来的VB.NET)来解决一些复杂的交互,然后将它转换为它在C ++中的Win32等价物。

然而,这是最后的手段。

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

将应用程序放在第二个屏幕上将不会让调试器在主UI屏幕上为调试断点中断时生成“invalidate”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM