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

翻译|其它|编辑:郝浩|2005-03-23 14:01:00.000|阅读 1243 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


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

目录

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

简介

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

前提

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

创建用户控件

  • 为了了解如何调试控件,我们首先要创建一个简单的用户控件:该控件只有一个按钮,单击此按钮时将显示一个消息框。
     

创建用户控件

  1. 创建一个新的 Windows Control Library(Windows 控件库)项目,并将它命名为 Control Debugging Demo(控件调试演示)。
     
  2. 从工具箱的 Windows Forms(Windows 窗体)选项卡中,将一个 Button(按钮)添加至控件的设计界面。
     
  3. 在设计器中,双击 Button1(在 C# 中为 button1)打开此按钮的单击事件处理程序,然后添加以下代码,即用户控件的代码和在运行时引发异常的代码。
     
    ' Visual Basic
    Private 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(全部保存)以保存解决方案。
     

创建测试项目

需要调试的控件必须在运行时驻留于宿主项目中。在本节中,我们将在项目中添加一个窗体,并在此窗体上创建用户控件的实例。

 

创建测试窗体

  • 从 File(文件)菜单中,选择 Add Project(添加项目),然后选择 Add New Project(添加新项目)。
     
  • 将打开 Add New Project(添加新项目)对话框。
     
  • 选择 Windows Application(Windows 应用程序)并将它命名为 Test Project(测试项目),然后单击 OK(确定)将该项目添加至解决方案。
     
  • 在 Solution Explorer(解决方案资源管理器)中,右击 Test Project(测试项目)并从快捷菜单中选择 Set As StartUp Project(设置为启动项目)。
     
  • 在工具箱中的 Windows Forms(Windows 窗体)选项卡中,双击 UserControl1。
    之前创建的用户控件将添加到此窗体中。可能需要向下滚动才能找到它。
     
  • 从 File(文件)菜单中,选择 Save All(全部保存)。
     

调试项目

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

现在,我们使用测试控件作为向导,来了解 Visual Studio 调试器的某些功能。

出错时中断
如果在调试控件时出现错误,代码的执行将在出错行中断。中断将出现在调用堆栈中的最深点,也就是说,如果错误出现在从宿主应用程序调用的控件方法中,则执行过程将在此控件方法中的出错行中断。

所创建的用户控件中包含以下代码行:

' Visual Basic
Throw New ApplicationException("出现未指定的错误")

// C#
throw new ApplicationException("出现未指定的错误");

此行在执行过程中引发异常。在调试模式下运行时,如果出现异常,程序的执行过程将在引发异常的代码行中断。
 

查找引发异常的代码行

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

逐语句执行代码
有时可能需要逐行检查应用程序的执行过程。Visual Studio .NET 允许通过以下方法来监视程序的执行过程:逐语句执行代码行、选择要中断的代码行或者在代码中设置断点。这些方法在到达特定行时都会暂停执行过程。

如果怀疑某一代码块导致了错误,但并不确定是哪一行存在问题,则可以设置断点。可以设置一个断点,使程序在进入代码块前暂停执行,然后逐语句执行每行代码,同时检查应用程序的变量。此外,如果怀疑多个代码块出错,可以设置多个断点,并按顺序检查这些断点。

在本节中,您将了解如何在代码中设置断点并逐语句执行后续的行。
 

设置断点并逐语句执行代码

  1. 打开包含 UserControl1 的 Code Editor(代码编辑器).
     
  2. 在 Button1.Click 事件中,找到以下行:
     
    ' Visual Basic
    myInteger = 42

    // C#
    myInteger = 42;

     

  3. 通过单击此行左侧的边距指示器条,在此行设置断点。
    断点将插入所指示的行,现在,该行突出显示为红色。
     
  4. 按 F5 键开始调试。
     
  5. 单击 Button1。
    程序执行过程在插入的断点处中断。
     
  6. 按 F11 键逐语句执行代码,直至执行到引发异常的代码行。

       注意:在逐语句执行代码时,将突出显示要执行的代码行。
     
  7. 通过注释掉引发异常的代码行来修复“错误”。下面提供了一个示例:
    ' Visual Basic
    ' Throw New ApplicationException("出现未指定的错误")

    // C#
    // throw new ApplicationException("出现未指定的错误");

     

  8. 右击断点并从快捷菜单中选择 Remove Breakpoint(删除断点)以清除此断点。
     
  9. 从 Debug(调试)菜单中,选择 Restart(重新启动)以重新启动应用程序。
     
  10. 单击 Button1。
    现在,此控件工作正常。

逐行执行

按 F11 键可以从应用程序的开始处逐语句执行每行代码。每个执行的代码行将按顺序显示,但用 System.Diagnostics.DebuggerStepThrough 属性标记的方法除外,这些方法在执行时将被跳过。

逐过程执行代码

此外,可以使用 F10 键逐过程执行代码。按 F10 键时,将跳过在当前方法之外执行的所有代码行。例如,如果方法调用了冗长或递归的方法,而又不需要监视其执行情况,则此功能非常有用。

总结

本文介绍了如何使用 Visual Studio .NET 调试工具来调试用户控件。在生成控件并将其置于宿主应用程序中后,就可以象调试应用程序的任何其他部分一样调试控件。这些技术同样适用于自定义控件、继承的控件和一般组件。
 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP