调试艺术
发表于 2008-04-19 11:48 AM 作者: polyrandom
总觉得调试是个技术活,反正计算机就是个没有生命的工具,一切奇怪的输出都是输入+程序的必然结果。不过这几天越来越觉得调试和看风水差不多了。
起因是一个我负责的工具突然之间在我的vista上所有用OpenGL渲染的东西都不显示了。于是拿过去的版本看,发觉曾经显示正常的,现在也都显示不正常了。接下去就是例行地升级显卡驱动和重启,不过一切都没解决。最恐怖的是,在我测试的几十次里面,居然也有1-2次显示正确的。
后来对这个复杂的程序进行剥离调试,总算找到解决方案:把OpenGL窗口的DC取到以后不释放,就可以正确显示。请注意,这只是解决方案,因为我没找到原因。于是我在注册窗口类的时候设了OWNDC标志,然后在创建窗口后立即得到一次DC,永不释放。
本质上说,这件事情最终的原因还是玄学无关的,而是因为程序所生存的环境并不是完全由我们控制的。譬如说这个问题,也许是驱动程序的问题,也许是SDK代码实现的不好,也许是文档说的不够清楚,但是无论哪一条,都不是我们能够控制的。
万幸,我还是搞定了!!
起因是一个我负责的工具突然之间在我的vista上所有用OpenGL渲染的东西都不显示了。于是拿过去的版本看,发觉曾经显示正常的,现在也都显示不正常了。接下去就是例行地升级显卡驱动和重启,不过一切都没解决。最恐怖的是,在我测试的几十次里面,居然也有1-2次显示正确的。
后来对这个复杂的程序进行剥离调试,总算找到解决方案:把OpenGL窗口的DC取到以后不释放,就可以正确显示。请注意,这只是解决方案,因为我没找到原因。于是我在注册窗口类的时候设了OWNDC标志,然后在创建窗口后立即得到一次DC,永不释放。
本质上说,这件事情最终的原因还是玄学无关的,而是因为程序所生存的环境并不是完全由我们控制的。譬如说这个问题,也许是驱动程序的问题,也许是SDK代码实现的不好,也许是文档说的不够清楚,但是无论哪一条,都不是我们能够控制的。
万幸,我还是搞定了!!
评论总数 2
评论
| | 是啊,我也是遇到这种问题,一个OpenGL程序,教研室一半机器显示正常,一半显示不正常,显示不正常的大多都是新的配置较高的机器。而且发现就一个语句不正常,用了它,好好的OpenGL马上就显示不正常,不用它一切就显示正常,最可怕的是这句话其实就是一个很普通的描绘材质的函数(而且在另一半的机器上这个程序完全正常)。 |
| 发表于 2008-05-22 02:00 PM 作者: 未注册 |
| | 有时候觉得MS真好。想当初VC和BC、OpenGL和DX都是很大的争端。但是现在发现,VC/DX在MS平台上就是比BC/OpenGL的问题要少很多。 |
发表于 2008-05-22 02:19 PM 作者: polyrandom |
发表评论 |
作者为 polyrandom 的最新文章
- 调试艺术 (2008-04-19)
- operator==的误用? (2007-04-07)
- 体育彩票的概率 (2007-03-10)
- 初始化错误 - 线程和同步变量 (2007-02-28)
- EPSILON的管理 (2007-02-03)




