首页 百科知识 程序的调试与运行

程序的调试与运行

时间:2022-06-19 百科知识 版权反馈
【摘要】:四、MapBasic程序的调试与运行创建MapBasic应用程序后,还需要对它进行调试,修改程序中存在的错误。]定位到引起问题的行,从而迅速地改正错误。"Map From states  Resume after_mapfrom该程序的第一个语句是使得错误捕获被允许,并告诉MapBasic一旦错误发生就转去执行no_states后面的处理程序,处理程序的结尾是Resume after_mapfrom,作用是使处理程序结束后能返回到标号after_mapfrom处。

四、MapBasic程序的调试与运行

创建MapBasic应用程序后,还需要对它进行调试,修改程序中存在的错误。

1.编译错误与运行错误

程序错误可以分为两种类型:编译错误和运行错误。编译错误主要由语法错误和输入错误引起,它使程序无法成功编译。编译错误产生时,相应的错误信息指出了程序文件名和错误所在的行号。知道了发生错误的行号,可以返回MapBasic开发环境,选择[Search]>[Go To Line…]定位到引起问题的行,从而迅速地改正错误。运行错误是指用户在实际运行应用程序时产生的错误。引起这种错误的原因很多,如数据问题、算法问题等。例如下面的语句可以成功编译:

Open Table"states"

Map From state

但是如果没有一个名叫“state”的表,那么程序就会产生一个运行错误,MapInfo将中断MapBasic应用程序的执行,然后显示一个描述该错误的对话框。

2.调试MapBasic程序

调试程序一般是指发现并改正运行错误的过程。有些运行错误很容易纠正,例如那些由输入错误引起的,像上面的例子中,程序员原意可能是想输入表名“states”而不是“state”。但是另外一些错误却很难定位,为了帮助你检测和纠正程序中的错误,MapBasic提供了调试程序的工具(Stop和Continue语句)。

如果程序不能正确执行,可以按下面的步骤找出问题在哪里。

①在MapBasic开发环境中编辑程序,把Stop语句放在程序中可能有错误的那个部分的前面。

②重新编辑并运行程序。当程序执行到Stop语句,MapBasic暂时挂起正在执行的程序,在MapBasic窗口中显示一个调试信息(例如“Breakpoint at appinfo.mb line20”)。

③在MapBasic调试窗口中,可以使用下列方法对程序运行情况进行检查:

·输入?Dim,查看所有正在使用的局部变量列表;

·输入?Global,查看所有正在使用的全局变量列表;

·输入?Variable_name,查看某个变量的当前值;

·输入?Variable_name=new_value,改变变量的当前值。

④当检查或修改了变量的内容后,可以在MapBasic窗口输入Continue接着执行程序,也可以选择MapInfo的[File]>[Continue]来启动程序的重新执行。

在下列情况下,不能用Stop语句来挂起一个应用程序:

·在Function…End Function结构中不能使用Stop语句;

·在对话框控制处理程序中不能使用Stop语句;

·在一个进度条(ProgressBar)处理程序中不能使用stop语句;

·当另外一个应用程序正在运行时不能调试这个程序。

另外,MapBasic的“Note”和“Print”语句也可以作为调试应用程序的辅助工具。例如,如果想观察一个变量值的变化情况,可以在应用程序中加入如下的Print语句:

Print“Current value of counter:”+counter

这样即可以在MapBasic的信息窗口输出一条相应的信息。另外,MapBasic自带例程Appinfo.mbx可以帮助检查当前正在运行的MapBasic应用程序的全局变量值。

3.错误的捕获

一个设计良好的应用程序应该对可能出现的运行错误进行预测,一旦错误发生还能采取一些补救措施。对运行错误的窃听和处理就叫做错误的捕获。捕获错误可以使用OnError语句。

在程序执行的任何一个点上,错误捕获既可以被允许也可以不被允许。默认情况下,所有过程或函数是由错误捕获不允许开始的,其中用OnError语句可以使错误捕获被允许。典型的情况是,OnError语句总指向一个在同一个过程或函数中另一个位置的标号。标号后面的语句叫做错误捕获处理程序。一旦错误发生,就去执行该处理程序,而不是中止程序。

在错误捕获处理程序中,可以调用Err()函数获得一个整型的代码,它表明了该错误是属于哪一种类型。同样地,也可以使用Error$()函数返回一个描述错误信息的字符串。在程序的结束处使用Resume语句,告诉MapBasic在该处理程序执行结束时接着执行哪一行程序。下面的示例演示了如何进行错误捕获及相应处理。

OnError GoTo no_states Open Table"states"

OnError GoTo no_cities Open Table"cities"

Map From cities,states

after_mapfrom:

  OnError GoTo 0

  ...

  End Program

no_states:

  Note"Could not open table States...no Map used."

  Resume after_mapfrom

no_cities:

  Note"City data not available…"

Map From states

  Resume after_mapfrom

该程序的第一个语句是使得错误捕获被允许,并告诉MapBasic一旦错误发生就转去执行no_states后面的处理程序,处理程序的结尾是Resume after_mapfrom,作用是使处理程序结束后能返回到标号after_mapfrom处。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈