程序编译通过并不能代表已经完成,一个稳定的程序应该尽可能除掉BUG。下面是我在编写DXGuide过程中积累的一些经验,对初学者也许有用。 编程过程及调试以前的工作:
编译以前注意将编译警告设成最高,在VC5或VC6中是/W4。许多隐藏的错误,如变量没赋值就使用等,在这个级别下编译器就会对此发出警告。
编程中可采用输出调试信息到一个文件中,许多BUG就可以在检查LOG文件时发现。
由于DirectX是基于COM的,所以在最后释放时应查看每个接口的Release()的返回值,如果不为0,说明没有正确释放干净。
检查每一个调用的返回值,如有错误立刻显示出来,做到这点并不难,可以将所有需调用的DirectX API全部封装在类中,在类中实现检测返回值的功能。
用BounsChecker查资源没有释放的BUG。
尽可能在不同的环境下进行试运行,一些程序在某些环境下正确,在另一些环境却工作不正常,那么很可能是您没有考虑周全(当然这点很难避免, 所以要多多检测),由于DirectX程序跟硬件关系比较密切,最好要经过尽可能多的硬件组合的考验。
使用调试版的DX,到“控制面板”中将Debug Level 设到不为0,当然越高调试信息越多,太多未必好,会把关键信息掩盖了,对查“Invalid Param”特别有用。
使用MFC,关于是否在写DIRECTX程序中使用MFC,我也看过了不少争论,大家见仁见智,各有各的理由,而我倾向于使用MFC,辅助函数多,久经考验,BUG较少,实践说明使用MFC对速度影响不大。[注(Mar-22-2001):我现在的代码已经不用MFC了,但我得说我从MFC学到了很多东西,我仍然觉得对以前用过MFC的初学者来说MFC是好工具,不过如果你的C++学得足够好的话我建议使用STL。]
调试:
记住,在您只有一台计算机并且不是多显示器的情况下,如果您使用GUI调试器(如VC等),千万不要设置断点于全屏方式运行的DirectX程序,不然看不到调试过程会很痛苦。把程序改成窗口方式运行再进行调试。
有两台联网PC条件的朋友最有效的方法当然是双机网络联调了。只要有一台机上装有VC5或VC6就可以,另一台运行MSVCMON这个小程序就可以进行调试了,不管是在全屏下还是LOCK代码内,都可设置断点调试,十分方便,是调试比较奇怪BUG的有效方法。至于具体如何实现双机联调可以看VC的联机文档。
|