1.5 在Visual Studio 2010中调试ASP.NET程序
应用程序调试是整个应用程序开发中相当频繁且重要的一部分,Visual Studio同样也提供了非常强大的特性来方便用户进行调试。为了在Visual Studio中调试Web页面,需要先在解决方案资源管理器中选择该页面,然后单击工具栏中的“启用调试”按钮。
依赖于应用程序所在的位置的不同,如果项目存储在一个远程的或本地的IIS虚拟目录中,Visual Studio只是简单的启动默认的浏览器并定向到相应的URL。如果是在文件系统中,Visual Studio将打开整合的Web服务器,并动态地选择一个端口,然后启动浏览器并传递指向本地Web服务的URL。这两种方式都将编译页面并创建传递给ASP.NET工作进程的页面对象。
1.5.1 单步调试
有时候,可能需要查看每一行代码的执行情况,此时可以使用单步调试。单步调试一次一行的执行代码,到下一行时等待用户的操作。单步调试非常容易使用,只需要如下的3步:
在需要执行单步调试的位置添加断点。可以将光标移到需要添加代码的行,然后按【F9】键,或者直接在代码边界单击一下鼠标,即可添加一个断点,如图1.77所示。
图1.77 添加断点
现在按常规方法启动应用程序,如按【F5】键,或者单击工具栏中的“启用调试”按钮。当程序执行到断点位置处时,执行将暂停,然后窗口将被切换回Visual Studio 2010的代码视图,执行点将停在断点所在的语句的位置处,但是断点语句并未执行。
此时,有几个选择,可以按【F11】键来逐行地执行程序代码,下一行将被高亮显示。表示那一行的代码将要被执行。开发人员可以持续地按【F11】键来单行执行代码,也可以按【F5】键来退出中断模式恢复代码的执行。
当代码位于中断模式时,开发人员可以将鼠标光标悬停在变量上查看它们的当前内容。这允许开发人员检查变量所包含的值是否如预期所料。如果悬停在一个对象上,可以通过单击加号来更深入地查看该对象成员相关的信息,如图1.78所示。
开发人员还可以按【F10】键来逐过程地执行代码,或者按【Shift+F11】组合键跳出断点模式,直接执行代码。
如果在项目的多个位置设置了断点,此时,可以在中断模式下选择“调试|窗口|断点”菜单项,将弹出图1.79所示的窗口。
图1.78 查看对象信息
图1.79 “断点”窗口
Visual Studio 2010与之前版本的“断点”窗口的一个显著的不同是该窗口增加了断点的导入和导出的功能,用户可以使用工具栏的“导出”按钮将断点导出为XML文件,或者是从一个XML文件中导入断点。
1.5.2 变量检测
有时,可能开发人员想查看变量的状态,而不想一次又一次地进入中断模式。此时,可以使用Visual Studio提供的局部变量窗口、自动窗口和监视窗口来查看变量的值,这些窗口允许开发人员追踪整个应用程序中的变量,这3个窗口的作用如下。
● 局部变量窗口:自动显示当前过程范围内所有变量的值,它提供了一个快速的概要浏览方式,如图1.80所示。
● 自动窗口:自动地显示Visual Studio 2010确定的当前代码语句块的重要变量。比如,可能包含已经被访问或在上一行中被变化的变量,如图1.81所示。
● 监视窗口:显示开发人员添加的变量的值,监视的变量被保存在项目中,因此可以在稍后继续进行追踪。为了添加一个监视,可以在代码视图中用鼠标右键单击变量名称,在弹出的快捷菜单中选择“添加监视”菜单项,或者是在监视窗口的最后一行上双击,输入变量名称,如图1.82所示。
图1.80 局部变量窗口
图1.81 自动变量窗口
图1.82 监视窗口
在局部、自动和监视窗口中的每行都提供了关于变量的类型或类及当前值信息,如果变量保存了一个对象实例,开发人员可以单击“+”按钮来展开其私有成员和属性。比如,在本地窗口中会看到引用Page对象的this变量,如果单击“+”按钮,则会看到Page页的成员,如图1.83所示。
图1.83 局部变量的详细信息
1.5.3 高级断点设置
开发人员按【F9】键或者是用鼠标单击代码编辑器左侧的边框来添加一个断点,通过选择“调试|窗口|断点”菜单项来打开“断点”窗口。该窗口提供了高级的选项来设置高级断点,如提供了命中次数设置,向开发人员显示断点已经被执行的次数。开发人员可以双击断点来跳转到断点所在的位置。也可以在“断点”窗口中禁用一个断点,而不是移除这个断点。
Visual Studio 2010让开发人员可以定义条件断点,为了定义条件断点,选中“断点”窗口中的某个断点,单击鼠标右键,将会弹出可供使用的几个高级断点选项,如下所示。
● 位置选项:选择该选项后,将会弹出图1.84所示的窗口,在该窗口中可以设置让程序执行到指定的位置时,中断开始执行。
● 条件选项:使用该选项可以设置一个条件表达式,可以选择仅当该条件表达式为true时才执行断点,或者是当最后一次断点被命中后发生改变时才执行断点,如图1.85所示。
● 断点命中次数选项:使用该选项可以设置断点的执行次数,默认情况下只要代码执行到断点所在的位置就中断执行,也可以设置在命中次数为多少次数时才中断代码的执行,如图1.86所示。
图1.84 根据指定的位置执行断点
图1.85 根据指定的条件执行断点
图1.86 使用命中次数选项
● 断点筛选器选项:使用该选项可以限制只在某些进程和线程中设置断点,如果不设置筛选器,则在所有的线程和进程中设置断点。开发人员可以使用MachineName设置机器名称,ProcessId设置进程ID,ThreadId设置线程ID,如图1.87所示。
● 命中断点时选项:开发人员可以在命中断点时来执行一些动作,如打印消息或执行Visual Studio的宏,窗口如图1.88所示。
图1.87 断点筛选器窗口
图1.88 命中断点时的选项
除了上述介绍的一些用于辅助开发的工具外,开发人员也可以使用一些第三方的辅助工具来加速应用程序的调试过程,限于篇幅原因,这里不再进行介绍。