如何跟踪和调试或 Visual Basic Visual Basic 2005年中。NET

文章翻译 文章翻译
文章编号: 313417 - 查看本文应用于的产品
本文的发布号曾为 CHS313417
有关此 Microsoft Visual Basic 6.0 版文章,请参阅 161153.
展开全部 | 关闭全部

本文内容

概要

本文介绍如何使用调试跟踪的类。Microsoft 提供了这些类。NET框架。您可以使用这些类提供有关的信息应用程序开发期间或之后应用程序的性能部署到生产环境。这些类是一个部分检测过程中提供的功能。NET框架。

要求

下表列出了推荐的硬件、 软件、网络基础结构和所需的服务包:
  • Microsoft Windows 2000 或 Windows XP
  • Microsoft Visual Basic 2005年或 Microsoft Visual Basic。NET
本文还假定您熟悉程序调试。

技术说明

在"创建与调试的类的示例"部分中的步骤演示了如何创建控制台提供有关程序的信息使用Debug类的应用程序执行。

当程序运行时,您可以使用Debug类的方法生成消息,以帮助监控、 检测故障,或提供的性能测量信息。默认情况下Debug类生成的消息出现在输出窗口的 Microsoft Visual Studio集成的开发环境 (IDE)。

代码示例使用WriteLine方法来生成一条消息后, 跟一条线终结器。当您使用此方法以生成一条消息时,每个消息显示在输出窗口中单独的行。

如果您使用Debug类的Assert方法,输出窗口将显示一条消息,只有当指定条件的计算结果为 false。消息也显示为模式对话框用户。对话框包括邮件、 项目名称和Debug.Assert语句数。该对话框还包括三个命令按钮:
  • 中止: 应用程序停止运行。
  • 重试: 应用程序进入调试模式。
  • 忽略: 应用程序开始。
用户必须单击这些按钮之前应用程序之一可以继续。

此外可以直接从Debug类的输出到输出窗口之外的其他目标。Debug类具有名为侦听器侦听程序对象的集合。每个侦听器对象监视调试输出,并将输出定向到指定的目标。侦听器集合中的每个侦听器都接收Debug类生成任何输出。使用TextWriterTraceListener类定义侦听程序对象。您可以指定它的构造函数通过TextWriterTraceListener类的目标。一些可能的输出目标包括:
  • 通过使用System.Console.Out属性控制台窗口。
  • 通过使用System.IO.File.CreateText("FileName.txt"))语句文本 (.txt) 文件。
创建一个TextWriterTraceListener对象后,您必须添加接收调试输出的Debug.Listeners集合对象。

使用 Debug 类创建示例

  1. 使用 Visual Basic 2005年或 Visual Basic。NET 用来创建新的控制台应用程序项目名为 conInfo。一个名为模块 1 的公用模块添加到的项目默认值。
  2. 若要初始化变量中包含的信息关于产品,添加下面的Dim语句:
    Dim sProdName As String = "Widget"
    Dim iUnitQty As Integer = 100
    Dim dUnitCost As Decimal = 1.03
    					
  3. 作为第一个指定的类生成的消息WriteLine方法的输入的参数。按下 CTRL + ALT + O 组合键,确保输出窗口是可见的。
    Debug.WriteLine("Debug Information-Product Starting ")
    					
  4. 为了提高可读性,请使用缩进方法缩进量输出窗口中的后续消息:
    Debug.Indent()
    					
  5. 若要显示所选变量的内容,请使用WriteLine方法,如下所示:
    Debug.WriteLine("The product name is " & sProdName)
    Debug.WriteLine("The available units on hand are " & iUnitQty)
    Debug.WriteLine("The per unit cost is " & dUnitCost)
    					
  6. 您还可以使用WriteLine方法显示命名空间和类名存在的对象。例如,下面的代码将显示在输出窗口中的System.Xml.XmlDocument命名空间:
    Dim oxml As New System.Xml.XmlDocument()
    Debug.WriteLine(oxml)
    					
  7. 要组织输出,可以包含与类别可选的第二个输入的参数的WriteLine方法。如果指定某一类别,则输出的格式邮件窗口的"类别: 消息。"例如,第一行下面的代码显示"字段: 产品名称是小部件"在输出中[] 窗口:
    Debug.WriteLine("The product name is " & sProdName, "Field")
    Debug.WriteLine("The units on hand are " & iUnitQty, "Field")
    Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")
    Debug.WriteLine("Total Cost is" & iUnitQty * dUnitCost, "Calc")
    					
  8. 输出窗口可以显示邮件,只有当指定通过使用Debug类的WriteLineIf方法,条件计算为 true。要计算的条件是第一个输入的参数在WriteLineIf方法。WriteLineIf的第二个参数时,才会显示该消息中第一个的条件参数值为 true。
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")
    					
  9. 使用Debug类的Assert方法,以便在输出窗口将显示消息仅当指定的条件的计算结果为 false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear")
    Debug.Assert(dUnitCost < 1, "Message will appear")
    					
  10. 创建TextWriterTraceListener对象的控制台窗口 (tr1) 和一个名为文本文件Output.txt (tr2),然后将每个对象添加到调试 Listeners集合:
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)
    Debug.Listeners.Add(tr1)
            
    Dim tr2 As New _
      TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))
    Debug.Listeners.Add(tr2)
    					
  11. 为了提高可读性,使用Unindent方法删除缩进,后续的邮件Debug类生成。组合使用缩进量Unindent方法,读者可以区分作为组的输出。
    Debug.Unindent()
    Debug.WriteLine("Debug Information-Product Ending")
    					
  12. 要确保每个侦听器对象接收所有的输出,请调用调试类缓冲区刷新方法:
    Debug.Flush()
    					

使用 Trace 类

您还可以使用Trace类生成的执行监视其状态消息应用程序。跟踪调试类共享相同的方法来生成输出大部分其中包括:
  • WriteLine
  • WriteLineIf
  • 缩进
  • 取消缩进
  • 断言
  • 刷新
您可以使用跟踪调试类分别或同时在同一个应用程序中。在中调试项目的解决方案配置,跟踪调试输出都处于活动状态。可从这两个项目生成的输出这些类的所有侦听器对象。但是,发布解决方案配置仅适用于项目从Trace类生成的输出。在发布解决方案配置项目将忽略任何调试类方法调用。
Trace.WriteLine("Trace Information-Product Starting ")

Trace.Indent()

Trace.WriteLine("The product name is " & sProdName)
Trace.WriteLine("The product name is " & sProdName, "Field")
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")
Trace.Assert(dUnitCost > 1, "Message will NOT appear")

Trace.Unindent()
Trace.WriteLine("Trace Information-Product Ending")
Trace.Flush()
Console.ReadLine()
				

验证它正常工作

  1. 请确保调试的当前的解决方案配置。
  2. 如果解决方案资源管理器窗口不可见,请按CTRL + ALT + L 键组合,以显示此窗口。
  3. ConInfo,用鼠标右键单击,然后单击属性
  4. 在 conInfo 属性页中,左窗格中下配置文件夹,请确保箭头指向调试
  5. 上面配置文件夹中的配置下拉列表框中,单击活动 (调试)调试,然后单击确定
  6. 请按 CTRL + ALT + O 显示输出窗口。
  7. 按 F5 键运行该代码。断言失败对话框出现时,单击忽略
  8. 在控制台窗口中,请按 ENTER。该程序应完成日期和输出窗口显示以下输出:
    Debug Information-Product Starting 
        The product name is Widget
        The available units on hand are 100
        The per unit cost is 1.03
        System.Xml.XmlDocument
        Field: The product name is Widget
        Field: The units on hand are 100
        Field: The per unit cost is 1.03
        Calc: Total cost is 103
        This message WILL appear
        ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Message will appear
    ---- Assert Long Message ----
    
        at Module1.Main()  C:\Documents and Settings\Administrator\My 
        Documents\Visual Studio Projects\conInfo\Module1.vb(29)
    
        The product name is Widget
        The available units on hand are 100
        The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting 
        The product name is Widget
        Field: The product name is Widget
        This message WILL appear
    Trace Information-Product Ending
    						
  9. 控制台窗口和 Output.txt 文件应显示下面的输出:
    (The Output.txt file is located in the same directory as the conInfo 
    executable, conInfo.exe. Normally this is the \bin folder of where the 
    project source has been stored. By default that would be C:\Documents and 
    Settings\User login\My Documents\Visual Studio Projects\conInfo\bin)
        The product name is Widget
        The available units on hand are 100
        The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting 
        The product name is Widget
        Field: The product name is Widget
        This message WILL appear
    Trace Information-Product Ending
    						

完整代码列表

Module Module1
    Sub Main()
        Dim sProdName As String = "Widget"
        Dim iUnitQty As Integer = 100
        Dim dUnitCost As Decimal = 1.03

        Debug.WriteLine("Debug Information-Product Starting ")
        Debug.Indent()

        Debug.WriteLine("The product name is " & sProdName)
        Debug.WriteLine("The available units on hand are " & iUnitQty)
        Debug.WriteLine("The per unit cost is " & dUnitCost)

        Dim oxml As New System.Xml.XmlDocument()
        Debug.WriteLine(oxml)

        Debug.WriteLine("The product name is " & sProdName, "Field")
        Debug.WriteLine("The units on hand are " & iUnitQty, "Field")
        Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")
        Debug.WriteLine("Total cost is " & iUnitQty * dUnitCost, "Calc")

        Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")
        Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")

        Debug.Assert(dUnitCost > 1, "Message will NOT appear")
        Debug.Assert(dUnitCost < 1, "Message will appear")

        Dim tr1 As New TextWriterTraceListener(System.Console.Out)
        Debug.Listeners.Add(tr1)

        Dim tr2 As New _
          TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))
        
        Debug.Listeners.Add(tr2)

        Debug.WriteLine("The product name is " & sProdName)
        Debug.WriteLine("The available units on hand are " & iUnitQty)
        Debug.WriteLine("The per unit cost is " & dUnitCost)

        Debug.Unindent()
        Debug.WriteLine("Debug Information-Product Ending")

        Debug.Flush()

        Trace.WriteLine("Trace Information-Product Starting ")

        Trace.Indent()

        Trace.WriteLine("The product name is " & sProdName)
        Trace.WriteLine("The product name is " & sProdName, "Field")
        Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")
        Trace.Assert(dUnitCost > 1, "Message will NOT appear")

        Trace.Unindent()
        Trace.WriteLine("Trace Information-Product Ending")

        Trace.Flush()

        Console.ReadLine()

    End Sub
End Module
				

故障排除

  • 如果解决方案配置类型为发布,则debug 类将被忽略。
  • 创建一个特定目标的TextWriterTraceListener类后, TextWriterTraceListener将接收来自跟踪调试类的输出。无论您是否要将TextWriterTraceListener添加到的侦听程序类使用Add方法的跟踪调试类出现这种情况。
  • 如果跟踪调试类中添加侦听器对象相同的目标,每一行输出被重复的无论是否调试跟踪生成输出。
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)
    Debug.Listeners.Add(tr1)
    Dim tr2 As New TextWriterTraceListener(System.Console.Out)
    Trace.Listeners.Add(tr2)
    					

参考

有关详细信息,请参阅.NET Framework 类库文档:
Trace 类
http://msdn2.microsoft.com/en-us/library/system.diagnostics.trace (vs.71).aspx

调试类
http://msdn2.microsoft.com/en-us/library/system.diagnostics.debug (vs.71).aspx


我如何检测并跟踪一个小应用程序?


http://asp.dotnetheaven.com/howto/doc/TraceDemo.aspx


http://quickstart.developerfusion.co.uk/quickstart/howto/doc/TraceDemo.aspx

属性

文章编号: 313417 - 最后修改: 2012年5月7日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
关键字:?
kbvs2005swept kbvs2005applies kbvs2002sp1sweep kbbug kbdebug kbhowtomaster kbmt KB313417 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 313417
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com