关键字:VB8.0 VB.NET Whidbey Edit and Continue E&C VB2005
我们都有调试程序的经验,当程序发生了异常或遇到断点中断执行时,如果我们发现代码中有问题需要修改,一般的开发工具需要完全重新编译后再次运行到此处才能检验是否修改正确。有时候项目重新运行到所需位置的速度很慢或者操作非常复杂时,完全编译再调试的执行方式就显得十分笨拙和低效。在Visual Basic还能够解释执行的时代,Visual Basic程序员都有一项非常便利的调试手段,那就是编辑后继续运行。我们可以在程序中断的情况下修改代码,然后立即从此处继续运行,有时甚至可以跳过出现异常的语句进行下去。这样,即使我们要反复修改代码并运行,也可以完全在调试时进行,这是多么方便。不过Visual Basic .NET没有这一功能,这让很多Visual Basic程序员十分扫兴,因为这是VB开发中的巨大优势之一。Visual Basic 2005重新加入了这一功能,让广大Visual Basic程序员又可以享受编辑后继续运行带来的便利。这一特性是在CLR层次上实现的,因此理论上任何建立在CLR上的语言都可以实现编辑后继续运行,但是Visual Basic在所有语言中最适合拥有这个特征,因为Visual Basic在书写代码时就立即编译,只有这样,中断时作出的修改才有可能立刻得以运行。在Visual Studio 2005中,目前也确实只有Visual Basic 2005带有这个功能。
演练
首先我们看看编辑后继续运行是如何工作的。这段代码将产生被零除的异常,我们用它来展示编辑后继续运行的功能:
Dim i, j As Integer
i = 1
j = 0
MsgBox(i \ j)
运行这段代码,我们将得到一个运行时异常,如图所示。
根据异常助手的指示,我们发现问题在于j在运行时被赋予0,而在进行除法时没有对j的值进行验证。这时,关闭异常助手,便可以立刻修改代码。比如我们修改成
If j <> 0 Then MsgBox(i \ j)
我们注意到编辑器左边有个黄色的箭头。那个箭头叫做instruction pointer,指示是将要执行的代码。如图所示:
现在我们就可以单击“运行”按钮继续运行了,正如预期的那样,异常不再发生。在中断状态,我们甚至可以手工控制运行的流程,而这个操作简单到只需动动鼠标。举个例子,假设刚才的错误发生时我们希望更改对j的赋值语句,然后运行看效果如何,那么我们可以在刚才中断下来的时候,将代码改为:
Dim i, j As Integer
i = 1
j = 1
MsgBox(i \ j)
这时黄色的箭头指向MsgBox语句,如果直接继续运行还是错误的结果。于是我们可以拖动黄色的箭头,使它指向j的赋值语句。如图所示:
接下来单击“运行”按钮,立刻就能看到弹出的消息框显示了正确的结果。
限制
Visual Basic 2005的编辑后继续运行功能是有一些限制的,比如将断点处的语句用With或SyncLock语句包围、移除局部变量的定义、改变循环语句或者改变调用堆栈中某方法的调用语句等等都不能继续运行。此外所有使用了泛型的语句修改后大都不能继续运行。这些限制是由CLR内部的工作原理引起的。关于具体的限制,MSDN的文档将会有详细的描述。
即使存在这些限制,我们的编辑后继续运行功能已经非常强大了,使用编辑后继续运行可以大大提高调试的效率,节约时间,而且对于初学者来说更易于学习和接受。
下期预告
未来几期介绍的是XML文档注释、无符号整数、Attribute编辑器和可视化调试环境等功能。如果你希望这些功能中的某个功能先介绍,可以在评论中表明你的想法。
打印 | 张贴于 2004-06-27 16:17:00 | Tag:技术随笔 Visual Basic 2005 新功能点评
留言反馈
完全.NET化也是大势所趋,但是Office中将保留VBA较长的时间,当然它的功能不会再升级。微软这样做是为了推动开发者尽快转向基于.NET Framework的Office开发。