我们在编程时难免都会出错,出错以后怎样找出错误的地方就变得很重要了,只有正确找出错误的地方才可以将其改正,下面我们就谈一些查错的常用方法。
一、如果在我们程序中有语法性的错误,当程序运行到错误的语句时系统就会停下来,并提示我们程序有错,往往还会说出是什么错误,如“命令中含有不能识别的短语或关键字”,并给出选择“取消”、“挂起”、“忽略”、“帮助”四个选择,它们的意思分别是:
取消——中止程序运行,回到命令窗口,相当于执行了cancel命令,在程序中创建的所有变量被释放(除公共变量),但数据库及数据表一般保持当时的状态,您可以用browse命令查看数据表的内容即记录指针所在的位置等等;
挂起——暂停程序,相当于执行了suspend命令,这时程序中的所有变量都保持原值,您可以用?命令查看变量的值,当然也可以查看数据表的情况;
忽略——忽略所出现的错误,即跳过出错的语句继续执行后面的语句;
帮助——显示有关出错的帮助信息,对于错误做更详细的说明。不过很多时候都没什么帮助。
如果这时您一眼就能看出问题出在哪,那么您可以用取消,然后进到程序中找出错误所在,将其改正。在选择了取消后,可能这时有表单是打开的,那么用鼠标点一下该窗口,然后调菜单上的文件—关闭。如果菜单是您自己的自定义菜单,用set sysmenu to default回到系统菜单。改完后,再次运行程序前,最好将所有的数据库及表关闭,以免在程序打开一个数据表时出现表已打开的错误,比较好的办法是在程序开头先关闭所有的数据库及表。关闭所有数据库的命令是:close databases all,关闭所有表的命令是:close tables all。
如果您不知道问题出在程序的哪个地方,那么就选择挂起,系统会弹出一个调试器窗口显示出错的语句,如 (看上去有点头大吧),在跟踪窗口的黄色箭头所指的语句就是出错的语句。这时不要马上改程序,因为程序还没有结束运行,如要改程序应先终止程序运行,按调试中的终止按钮 ,然后退出调试器(菜单上的文件—退出),接下来与上面选择取消后的处理方法相同。
一般不要选择忽略,因为程序中上下语句都有很紧密的关系,当一条语句出错后,如果继续运行,可能会出现很多错误,而后面出错的语句可能并没有错,是因为前面错了才导致后面的语句出错,如果前面正确,后面也会正确,因此对于初学者来说,选择忽略不利于找出错误所在。
二、有些时候,程序中的语句并没有出错,但是运行的结果却不是我们所要的结果,这往往是因为我们用错了语句,虽然语句本身是正确的,但用在了不该用的地方、或者该用的地方没有用、又或者语句的先后顺序错了等等,都可能导致这种情况。
一旦出现这种情况往往比上一种情况麻烦些,不容易一下看出问题出在哪里,那么需要我们仔细分析程序中的语句,看是否用的对,是否达到了我们的要求。
比如在我们前面的人事管理程序中,调出编辑人员表单,按了新增后,表单中的各控件的内容没有变,那么这就有两种可能,一是没有增加一条空记录,二是没有将控件刷新,这就要我们根据具体问题具体分析。
有时光看语句,怎么也看不出问题在哪,这就用采用一些辅助手段,最常用的辅助手段是在可能发生问题的地方将程序挂起,即在程序中加一句suspend,当程序运行到这里时将程序挂起,然后在命令窗口中查看各有关变量的值或数据表的情况。比如上面的错误,我们可以在新增按钮的click事件的结尾加一句suspend,当程序运行到这里时就会挂起,我们可以用browse查看数据表,如果发现里面没有一个空记录,那么说明漏了加空记录的语句。如找到错误了,记得在命令窗口中运行cancel,将程序终止再去修改程序。
另外在程序挂起时我们可以调出器,看程序执行到什么地方,调的方法是在菜单上的工具—调试器,可以在其中的监视窗口查看各表达式的值,在局部窗口查看各变量的值,而且您可以在窗口中长条文本框(如 )中输入一个表达式或变量,调试器会显示出它们的值。
如还不能找到问题,按 可单步执行程序,即按一下运行一条语句,这样可以更有助于找到问题。至于调试器的其它功能,我们将在以后的课程中讲解。
常见错误