VS.NET中对应用程序进行调试的方法和步骤
2010-10-09郭树文
郭树文
(赤峰市环境科学研究院,内蒙古 赤峰 024000)
VS.NET中对应用程序进行调试的方法和步骤
郭树文
(赤峰市环境科学研究院,内蒙古 赤峰 024000)
本文介绍了在Visual Studio.NET的IDE环境中对应用程序进行调试的方法和步骤,并介绍了VS.NET中的调试工具.
应用程序;错误;调试
开发出应用程序后,必须先确保其没有错误并且安全可靠,然后才能将其交付给用户.也就是说,在确定应用程序可以发布之前,必须先彻底检查该应用程序是否存在错误,并且应纠正遇到的任何错误.其实,任何实际的应用软件都不能保证完全没有错误,但是程序员要保证尽力发现软件存在的错误并修正这些错误.搜寻和消除错误的过程称为调试.调试过程是一个程序员最重要的工作之一.
本文将详细讨论如何对C#中的应用程序进行调试、排除错误.
1 调试的必要性
以某大型购物中心的场景为例,该中心使用计算机处理其计费系统.此系统接受顾客所购所有商品的名称和价格,计算总额,减去折扣(如果有),然后输出最终的帐单金额.假设在事务处理过程中,收银员的计算机屏幕显示一则错误消息,然后应用程序终止.这时候必须重新执行未完成的当前事务处理,还必须重新输入全部信息.但是,如果程序员已经预先编写代码对这种情况进行处理,这种错误就不会发生,系统也不会崩溃.
必须先完全消除所有已经发现的语法错误和语义错误,然后才能成功部署应用程序.而在将软件视为完全可靠之前,应该先对其进行测试.软件测试过程是软件开发过程中的一个重要组成部分.但是,尽管测试有助于确定输出结果是否正确,但它无法确定错误发生的确切位置.这就是需要使用调试的原因.
测试是对开发人员认为正确的许多方面进行确认,直至开发人员发现其中一项不正确的这样一个过程.而调试就是找出并改正这些不正确项的过程.
例如,程序员认为变量X的值在某一时间将为12,或认为在函数调用AREA(number,5)中接收到参数number和5的值是正确的.程序员对此如何确认?答案是使用调试工具.调试工具虽然无法确定错误,但是对于确定错误发生的位置极为有用.建议在所有的编程工作中使用一个调试工具. Visual Studio.NET的IDE带有调试工具.
2 错误类型
语法错误是编码过程中遇到的最明显的一类错误.程序员在编写代码的过程中不遵循语言规则时,就会产生语法错误.例如,C#要求程序员在每行代码的末尾加上分号.如果漏掉分号,就被视为语法错误.
当应用程序试图执行无法实施的操作时,就会产生运行时错误.此类错误发生在运行时.在程序运行过程中要拿一个变量作除数,然而这个时候这个变量的值是0,这种情况就会产生运行时错误.
语义错误指编译器不会直接指出的逻辑错误,语法可能是对的,但代码或许不会显示所需的输出结果.此类错误仅在其实际发生时出现在运行时,这是最难发现的程序错误.检测此类错误的唯一方式是测试应用程序,以确保其提供的输出结果为预期结果.表1列出了各种错误之间的区别.
3 调试过程
很多程序员通常都试图通过调用输出函数(如Console.Write()等)来显示某种消息,以判断该点以前的代码是否正确执行,从而达到隔离问题的目的.这些函数还可以用来跟踪和显示程序内某个变量的值.这是一种有效的调试技术.但麻烦的是,一旦找到并解决了问题,必须从代码中删除所有这些输出函数的调用.这是一个相当繁琐的过程.
表1 语法错误和语义错误
为简化此过程,大多数编程语言和工具都提供有调试器,以便程序员观察程序的运行时行为并跟踪变量的值,从而确定错误的位置.使用调试器的优点是,检查变量的值时不必插入任何输出语句来显示这些值.Visual Studio.NET也提供有调试器,以便程序员调试使用.NET支持的任意一种语言编写的代码.它为程序员提供了计算变量的值和编辑变量、暂挂或暂停程序执行、查看寄存器的内容以及查看应用程序所耗内存空间的工具等.
使用调试器时,必须在代码中插入“断点”,以便在特定行处停止执行.断点告知调试器,程序应在设置的断点处暂停执行(暂时停止).程序进入中断模式后,就处于暂挂状态.VS.NET中的许多调试器功能都只能在中断模式下调用.通过这些功能,程序员可以检查变量的值,如果需要还可以更改变量的值,也可以检查其他数据.
在VS.NET中设置断点的步骤如下:
(1)右击所需代码行,以设置断点.此时会显示弹出式窗口
(2)选择“插入断点”.设置断点所在的代码行由代码旁的彩色点指示,且整行均为高亮显示.
下图所示为在不同的代码行设置有断点的程序示例的代码窗口.遇到断点时,程序会在设置断点所在的代码行停止.
在上图中,控制权位于第一个断点,代码旁的黄色箭头和黄色高亮显示便可表明这一点.要继续执行程序,请从菜单中选择“调试”?“继续”(也可以按快捷键F5).如果设置有更多断点,程序执行将在每个断点处再次停止,选择“调试”?“继续”后将会继续.
Visual Studio.NET环境提供了创建、编译和生成应用程序解决方案的工具.共有两种模式可用来生成应用程序,一种是调试模式(Debug模式)另一种是发布模式(Release模式).调试模式可用来重复编译应用程序和排除错误,直至能够成功运行.当应用程序无需重复编译即可发布时,再改成发布模式编译,然后发布.
4 VS.NET中的调试工具
VS.NET调试器提供有多个窗口,用以监控程序执行.其中可在调试过程中使用的部分窗口包括“局部变量”窗口、“监视”窗口、“快速监视”对话框、“即时”窗口.下面我们将逐个说明这些窗口:
4.1 “局部变量”窗口
“局部变量”窗口显示局部变量中的值.它只列出当前作用域(即正在执行的方法)内的变量并跟踪它们的值.控制权一旦转到类中的其他方法,系统就会从“局部变量”窗口中清除列出的变量(如果超出作用域),并显示当前方法的变量.
调试应用程序时从菜单中选择“调试”→“窗口”→“局部变量”,即可显示“局部变量”窗口.
“局部变量”窗口包含三列信息:“名称”列显示变量的名称,“值”列显示变量的值,“类型”列显示变量的类型.当程序执行从一个方法转向另一个方法时,“局部变量”窗口中显示的变量也会改变,从而只显示局部变量.可以为“值”列下的字符串和数值变量键入新值,当值被更改后,新值将显示为红色.程序将使用这个变量的新值.
4.2 “监视”窗口
“监视”窗口用于计算变量和表达式的值,并通过程序跟踪它们的值,也可以用来编辑变量的值.与“局部变量”窗口不同,此窗口中要“监视”的变量应由开发人员提供或指示.因此,可以指定不同方法中的变量.要同时检查多个表达式或变量,可以同时打开多个“监视”窗口.VS.NETIDE中的“监视”窗口如图9.4所示.变量的名称应在窗口中指定.执行程序时,“监视”窗口会自动跟踪变量的值.如果被监视的变量作用域不在当前执行的方法内,将会显示“标识符超出范围”的错误.
从菜单中选择“调试”→“窗口”→“监视”窗口(1)“监视”窗口,(2)“监视”窗口,(3)或“监视”窗口,(4)即可显示“监视”窗口.
4.3 “快速监视”对话框
“快速监视”对话框可用于快速计算变量或表达式的值.通过此对话框还可以修改变量的值.下图所示为“快速监视”对话框.
此对话框每次只能用来显示一个变量的值.此外,此对话框实际为模式对话框.也就是说,它不能用来在执行过程中跟踪变量的值.要继续执行代码,必须关闭此对话框.要跟踪变量的值,可以单击“添加监视”按钮,将变量添加到“监视”窗口中.
用右键单击变量并选择“快速监视”,即可显示“快速监视”对话框.
4.4 “即时”窗口
“命令”窗口的即时模式可用于检查变量的值、给变量赋值以及运行一行代码.下图所示为VS. NET中“命令”窗口的即时模式.要查找变量的值,必须在变量的名称前添加问号(?).当应用程序处于中断模式时,值将显示在“命令”窗口的即时模式中.同样,在此窗口中键入赋值代码,然后按下Enter键,即可更改变量的值.分中断模式无法使用“即时”窗口.
从菜单中选择“调试”→“窗口”→“即时”,即可显示即时模式下的“命令”窗口.
5 Visual Studio.NET调试器的部分功能
(1)跨语言调试使用 VB.NET、VC++.NET、VC#.NET、Managed Extensions for C++、脚本和SQL编写的应用程序.
(2)调试为Microsoft.NET框架公共语言运行库编写的应用程序以及Win 32本机应用程序.
(3)加入正在主机或远程机器上运行的程序.
(4)通过在单个Visual Studio解决方案中启动多个程序,或加入已经在运行的其他程序来调试多个程序.
调试在编码过程中以最小粒度执行.现在已经有很多的方法和调试环境帮助软件开发人员在编码过程中调试程序.集成开发环境(IDE)提供了一种在不需要编译的情况下捕获语言专有预定义错误(如语句结尾缺少字符和未定义变量等)的方式.
通过对应用程序的调试,可以找出程序中存在的绝大部分语法错误和运行时错误,减少程序在运行过程中出现错误,造成系统中断.但是,即使找到并消除了应用程序中的语法错误和运行时错误,程序仍然不一定完全正确.要确保应用程序工作完全正常,还必须使用各种数据对其进行测试.测试可以确保向客户交付稳定可靠的产品,是检查应用程序并确保其符合设计规范的过程.测试的另一个重要原因是软件中包含许多尚未发现的错误,为找出应用程序中这些错误,应当对其进行测试.
〔1〕Jeff Ferguson,Brian Patterson et al.C# Bible [M].北京:电子工业出版社出版,2002(12):258-269.
TP206
A
1673-260X(2010)03-0026-03