一种MFC对话框程序排错的方法

近日在开发MFC对话框程序时遇到界面卡住无法显示的问题。通过使用一种排查方法,成功解决了这个问题。
具体来说,项目是由Web页面加载OCX控件,OCX控件中创建MFC窗口并显示。此时,Web创建窗口并加载OCX控件,但是加载后MFC窗口并没有完全显示,而是需要把程序窗口最小化,然后再还原才能正常显示。
初步判断该问题为MFC对话框工程中某个窗口创建异常导致。
于是,通过分析该工程框架结构,认清各个窗口之间的关系,从所有窗口的父窗口开始,逐个排查。比如主对话框创建了3个子对话框,就依次把创建3个对话框的代码屏蔽(注释),然后编译生成并运行,查看效果。
通过排查发现,如果把第2个创建窗口的代码屏蔽掉,程序运行后窗口可以正常显示;如果不屏蔽,则窗口无法显示。所以判定出问题的应该是在第2个窗口中。

同理,找到第2个窗口创建子窗口的代码,依次屏蔽掉其子窗口创建的代码,并编译运行,查看效果...最后定位到一个窗口创建的代码。该窗口没有子窗口,把该窗口初始化的代码屏蔽掉,发现仍存在问题。于是通过仔细观察发现,该对话框控件在窗口类中定义了一个自定义控件类型的变量。于是将该变量的定义和相关使用处屏蔽,发现程序可以运行。那么这个问题就定位为该自定义控件类型变量存在问题。经过分析发现,该自定义控件类在构造函数中的代码导致了整个窗口刷新异常。然后通过修改该自定义控件类的构造函数最终解决了窗口刷新异常的问题。

该排除法适合于程序存在异常但无法立即准确定位时,通过逐个排除,最终定位并解决异常。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值