日期:2008-07-05  浏览次数:20646 次

调试使用 Visual Basic .NET 或 Visual C# .NET 创建的Windows窗体控件
Matthew A. Stoecker

Visual Studio Team
Microsoft Corporation
2002 年 2 月

摘要:本文通过创建一个宿主应用程序来介绍调试用户控件的基本内容,并讨论代码的逐语句执行和断点的设置。

目录

  • 简介
  • 前提
  • 创建用户控件
  • 创建测试项目
  • 调试项目
  • 总结

简介


Visual Studio® .NET 集成开发环境 (IDE) 提供了许多工具,可用于监视程序的执行过程,以及查找用户控件和自定义控件中的错误。您可以使用调试工具逐行执行代码、在代码中添加断点以及使用各种调试窗口在运行时监视执行情况。由于控件不是独立的项目,因此在调试时必须为控件提供一个宿主。在本文中,我们将创建一个简单的用户控件,然后尝试使用各种调试技术。本文中使用的是用户控件,但这些技术也适用于自定义控件和继承的控件。

前提

  • 要充分理解本文的内容,您应当了解如何创建简单的用户控件。

创建用户控件


为了了解如何调试控件,我们首先要创建一个简单的用户控件:该控件只有一个按钮,单击此按钮时将显示一个消息框。
创建用户控件
  1. 创建一个新的 Windows Control Library(Windows 控件库)项目,并将它命名为 Control Debugging Demo(控件调试演示)。
  2. 从工具箱的 Windows Forms(Windows 窗体)选项卡中,将一个 Button(按钮)添加至控件的设计界面。
  3. 在设计器中,双击 Button1(在 C# 中为 button1)打开此按钮的单击事件处理程序,然后添加以下代码,即用户控件的代码和在运行时引发异常的代码。
    ' Visual BasicPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As _   System.EventArgs) Handles Button1.Click   Dim myInteger as Integer   myInteger = 42   ' 在运行时引发异常。   Throw New ApplicationException("出现未指定的错误")   MessageBox.Show(myInteger.ToString)End Sub// C#private void button1_Click(object sender, System.EventArgs e){   int myInteger;   myInteger = 42;   // 在运行时引发异常。    throw new ApplicationException("出现未指定的错误");   MessageBox.Show(myInteger.ToString());}
  4. Build(生成)菜单中,选择 Build Control Debugging Demo(生成控件调试演示)以生成该项目。
  5. File(文件)菜单中,选择 Save All(全部保存)以保存解决方案。

创建测试项目


需要调试的控件必须在运行时驻留于宿主项目中。在本节中,我们将在项目中添加一个窗体,并在此窗体上创建用户控件的实例。
创建测试窗体
  1. File(文件)菜单中,选择 Add Project(添加项目),然后选择 Add New Project(添加新项目)。
    将打开 Add New Project(添加新项目)对话框。
  2. 选择 Windows Application(Windows 应用程序)并将它命名为 Test Project(测试项目),然后单击 OK(确定)将该项目添加至解决方案。
  3. 在 Solution Explorer(解决方案资源管理器)中,右击 Test Project(测试项目)并从快捷菜单中选择 Set As StartUp Project(设置为启动项目)。
  4. 在工具箱中的 Windows Forms(Windows 窗体)选项卡中,双击 UserControl1
    之前创建的用户控件将添加到此窗体中。可能需要向下滚动才能找到它。
  5. File(文件)菜单中,选择 Save All(全部保存)。

调试项目


现在我们已经创建了一个用户控件。这个非常简单的示例并不需要进行大量调试,但复杂的用户控件可能封装有数千行代码。因此,确保控件中没有逻辑错误是非常重要的。
现在,我们使用测试控件作为向导,来了解 Visual Studio 调试器的某些功能。

出错时中断


如果在调试控件时出现错误,代码的执行将在出错行中断。中断将出现在调用堆栈中的最深点,也就是说,如果错误出现在从宿主应用程序调用的控件方法中,则执行过程将在此控件方法中的出错行中断。
所创建的用户控件中包含以下代码行:
' Visual BasicThrow New ApplicationException("出现未指定的错误")// C#throw new ApplicationException("出现未指定的错误");

此行在执行过程中引发异常。在调试模式下运行时,如果出现异常,程序的执行过程将在引发异常的代码行中断。
查找引发异常的代码行
  1. F5 键,以调试模式生成并启动应用程序。
    将启动应用程序,并显示包含用户控件的启动窗体。
  2. 单击 Button1
    应用程序的执行过程暂停并返回到 Code(代码)视图,同时显示一条错误消息,说明发生了无法处理的异常。
  3. 单击 Break(中断)进入中断模式。
    引发异常的代码行将被突出显示。现在可以检查代码行以确定出错的原因。

逐语句执行代码


有时可能需要逐行检查应用程序的执行过程。Visual Studio .NET 允许通过以下方法来监视程序的执行过程:逐语句执行代码行、选择要中断的代码行或者在代码中设置断点。这些方法在到达特定行时都会暂停执行过程。
如果怀疑某一代码块导致了错误,但并不确定是哪一行存在问题,则可以设置断点。可以设置一个断点,使程序在进入代码块前暂停执行,然后逐语句执行每行代码,同时检查应用程序的变量。此外,如果怀疑多个代码块出错,可以设置多个断点,并按顺序检查这些断点。
在本节中,您将了解如何在代码中设置断点并逐语句执行后续的行。
设置断点并逐语句执行代码
  1. 打开包含 UserControl1 的 Code Editor(代码编辑器)。
  2. 在 Button1.Click 事件中,找到以下行:
    ' Visual BasicmyInteger = 42// C#myInteger = 42;
  3. 通过单击此行左侧的边距指示器条,在此行设置断点。
    断点将插入所指示的行,现在,该行突出显示为红色。
  4. F5 键开始调试。
  5. 单击 Button1
    程序执行过程在插入的断点处中断。
  6. F11 键逐语句执行代码,直至执行到引发异常的代码行。
    注意:在逐语句执行代码时,将突出显示要执行的代码行。
  7. 通过注释掉引发异常的代码行来修复“错误”。