通过使用 IntelliTrace 记录代码执行来调试应用程序

若要花费较少的时间调试您的应用程序,请记录和跟踪在 Visual Studio 旗舰版中使用 IntelliTrace 的执行历史记录。 这可帮助您更轻松地发现 bug,而无需设置很多断点,因为 IntelliTrace 可以:

  • 记录发生在应用程序中的特定事件。

    如果您选择收集它,则您将可以检查相关代码、调试器事件期间的**“局部变量”**窗口中显示的数据和函数调用信息。

  • 减少重新启动应用程序可以重新生成 bug 或事件。

  • 调试很难重现或发生在 Visual Studio 外的错误,例如,在生产或其它环境中。

此示例演示如何在代码中记录事件可以帮助查找 bug:

仅 IntelliTrace 事件 - 高级流

监视工作中的 IntelliTrace:收集并分析要调试的 IntelliTrace 数据 (Channel 9 video)

您希望做什么?

在 Visual Studio 中,使用 IntelliTrace 调试我的应用程序:

  • 我想查看以前的事件。

  • 我想查看使用以前事件的调用信息。

  • 保存我的 IntelliTrace 会话。

  • 控制 IntelliTrace 收集的数据。

在测试管理器中的测试会话期间,收集 IntelliTrace 数据

从应用程序在 Visual Studio 外运行收集 IntelliTrace 数据

从 IntelliTrace 日志文件(.iTrace 文件)中开始调试。

FAQ

  • 哪些应用程序可以使用 IntelliTrace 进行调试?

  • 为何使用 IntelliTrace 进行调试?

  • IntelliTrace 收集哪些数据?

  • IntelliTrace 将减慢我的应用程序吗?

哪些应用程序可以使用 IntelliTrace 进行调试?

是否支持

有限支持

  • 实验证明 F# 应用程序

  • Windows 应用商店应用程序仅支持事件

不支持

  • C++、其他语言和脚本

  • Silverlight、Xbox 或 Windows Mobile 应用程序

备注

如果要调试已经在运行的进程,则不能使用 IntelliTrace。在启动进程时,必须启动 IntelliTrace。

为何使用 IntelliTrace 进行调试?

传统或 实时 调试仅显示使用有关先前事件的有限数据的应用程序的当前状态。 必须推断基于应用程序的当前状态的这些事件,或者必须通过重新运行应用程序来重新生成这些事件。

IntelliTrace 通过记录特定事件和这些时间点的数据扩展此传统调试体验。 这使您可以看到应用程序中所发生的改变,而无需重新启动,特别是单步执行到 bug 处。 默认情况下,在传统调试和自动收集数据并不可见期间打开 IntelliTrace。 这将让您能够轻松地切换到传统调试和 IntelliTrace 调试之间来查看该记录信息。 请参见 使用 IntelliTrace 记录代码执行以便在 Visual Studio 中进行调试 和 IntelliTrace 收集哪些数据?

IntelliTrace 还可帮助您调试难以重现或在 Visual Studio 外发生的错误。 可以收集 IntelliTrace 数据并将其保存为 IntelliTrace 日志文件(.iTrace文件)。 .iTrace 文件包含有关异常、线程、Web 请求、测试数据,模块和其他系统信息的详细信息。 您可以在 Visual Studio 旗舰版中打开此文件、选择项和开始使用 IntelliTrace 进行调试。 这使您可以转到文件中的所有操作并在此时间点查看有关应用程序的特定详细信息。

您可以从这些源中保存 IntelliTrace 数据:

  • Visual Studio 旗舰版中的 IntelliTrace 会话

  • Microsoft 测试管理器中的测试会话

  • 在 Visual Studio 外运行的应用程序,例如,在生产环境或其他环境中

  • Visual Studio 2012.1:由包含 IntelliTrace 分析管理包的 System Center 2012 Service Pack 1 (SP1) - Operations Manager 监控的应用程序。 请参见 How to Configure Integration with IntelliTrace in System Center 2012

请参见 使用 IntelliTrace 日志 (.iTrace) 文件调试应用程序

下面是一些示例,说明 IntelliTrace 如何帮助您进行调试:

  • 您的应用程序损坏了一个数据文件,但是,您不知道此事件发生的位置。

    如果不使用 IntelliTrace,则必须浏览代码以查找所有可能的文件访问,在这些访问上放置断点,并且重新运行应用程序以查找发生问题的位置。 利用 IntelliTrace,当每个事件发生时,您可以看到所有集合文件访问事件和有关应用程序的特定详细信息。

  • 发生了一个异常。

    如果不使用 IntelliTrace,则会获得有关异常的消息,但不会获得有关导致异常的事件的过多信息。 您可以检查调用堆栈,以查看导致异常的调用链,但不能查找调用过程中发生的事件序列。 利用 IntelliTrace,您可以在异常之前检查发生的事件。

  • 应用程序在测试计算机上崩溃,而在开发计算机上成功运行。

    可以从 Microsoft 测试管理器 中收集 IntelliTrace 数据,将该数据保存到 .iTrace 文件,并将此文件附加到最新调查的 Team Foundation Server 工作项。 请参见在难以重现的 Bug 中包含诊断跟踪数据使用 IntelliTrace 日志 (.iTrace) 文件调试应用程序

  • bug 或崩溃发生在 Visual Studio 之外运行的应用程序中。

    对于基于 Windows Azure 的应用程序,在发布该应用程序之前,您可以配置 IntelliTrace 数据收集。 应用程序运行时,IntelliTrace 会将数据保存到 .iTrace 文件。 请参见 使用 IntelliTrace 和 Visual Studio 进行调试已发布的云服务

    对于托管桌面 (.exe) 应用程序、承载在 IIS 7.0、7.5 和 8.0 上的 ASP.NET Web 应用程序以及 SharePoint 2010,可以使用独立回收器来将 IntelliTrace 数据保存到 .iTrace 文件。

    当您需要诊断在不需要更改系统配置的环境下(如生产环境)运行的应用程序的问题时,这将非常有用。 您可以安装该回收器,而无需更改您的系统配置。 当收集数据完成时,只删除该回收器而不卸载。 请参见 使用独立收集器收集 Visual Studio 外部的 IntelliTrace 数据

IntelliTrace 收集哪些数据?

收集事件信息

默认情况下,IntelliTrace 只记录 IntelliTrace 事件。 这些是调试器事件、异常、.NET Framework 事件以及可以帮助使用调试的系统事件。 您可以选择想要收集的 IntelliTrace 事件的类型(始终收集的调试器事件和异常除外)。 请参见 在 Visual Studio 中配置 IntelliTrace 集合以便进行调试

  • 调试器事件

    IntelliTrace 始终记录发生在 Visual Studio 调试器中的事件。 例如,启动应用程序是一个调试器事件。 其他调试器事件包括停止事件,导致您的应用程序中断执行。 例如,您的程序命中断点、命中跟踪点或执行**“步骤”**命令。

    若要帮助提供性能,IntelliTrace 不记录调试器事件的每个可能值, 相反,它将记录这些值:

    • **“局部变量”窗口中的值。 保持“局部变量”**窗口打开以查看这些值。

    • **“自动窗口”窗口中的值,仅当“自动窗口”**窗口处于打开状态

    • 当鼠标指针移到源窗口中的变量的底部以查找其值时将显示 DataTips 中的值。 IntelliTrace 不收集固定数据提示的值。

  • 异常

    IntelliTrace 会记录异常类型和这些异常类型的消息:

    • 引发并捕获已处理异常的异常

    • 未经处理的异常

  • .NET Framework 事件

    默认情况下,IntelliTrace 记录最常见的 .NET Framework 事件。 例如:

    • 对于文件访问事件,IntelliTrace 将收集该文件名。

    • 对于选中复选框事件,IntelliTrace 将收集该复选框状态和文本。

  • Visual Studio 2012.1:SharePoint 2010 应用程序事件

    对于在 Visual Studio 外运行的 SharePoint 2010 应用程序,应使用 Visual Studio 2012.1 中的独立回收器将特定 SharePoint 事件记录并保存到 .iTrace 文件中。

    打开 .iTrace 文件时,可以输入 SharePoint 关联 ID 查找其匹配的 Web 请求,查看记录事件,并从特定事件开始调试。 如果文件包含未经处理的异常,可以选择相关 ID,开始调试异常。 您可以记录用户配置文件事件和统一日志记录系统 (ULS) 事件的子集。

    请参见:

收集函数调用信息

可以配置 IntelliTrace 以收集函数的调用信息。 此信息使你可以在该代码中查看调用堆栈的历史记录并可以使你向后和向前调用。 对于每个函数调用,IntelliTrace 将记录此数据:

  • 函数名

  • 基元数据类型的值在函数入口点作为参数传递并在函数退出点返回

  • 当读取或更改自动属性的值时

  • 指向第一级子对象的指针,但如果他们为空除外,则不是它们的值

备注

IntelliTrace 仅收集数组中的头 256 个对象和字符串的头 256 个字符。

请参见 在 Visual Studio 中配置 IntelliTrace 集合以便进行调试

收集模块信息

要控制 IntelliTrace 收集的调用信息量,请仅指定您关注的模块。 这也有助于在集合期间提高应用程序的性能。 请参见 在 Visual Studio 中配置 IntelliTrace 集合以便进行调试

IntelliTrace 将减慢我的应用程序吗?

默认情况下,IntelliTrace 仅收集所选 IntelliTrace 事件的数据。 这可能会或不会减慢 app,具体取决于代码的结构和组织。 例如,如果 IntelliTrace 通常记录事件,这可能减慢您的应用程序,但是,它还可能提示您考虑重构您的应用程序。

收集调用信息可能会显著减慢您的应用程序。 它还可能增加您保存到磁盘上的 IntelliTrace 日志文件(.iTrace 文件)的大小。 若要使这些影响最小化,应仅收集您关心的模块的调用信息。 若要更改 .iTrace 文件的最大大小,请转到**“工具”“选项”IntelliTrace“高级”**。 请参见 在 Visual Studio 中配置 IntelliTrace 集合以便进行调试

在何处可以获取更多信息?

使用 IntelliTrace 记录代码执行以便在 Visual Studio 中进行调试

在 Visual Studio 中配置 IntelliTrace 集合以便进行调试

在难以重现的 Bug 中包含诊断跟踪数据

使用独立收集器收集 Visual Studio 外部的 IntelliTrace 数据

使用 IntelliTrace 日志 (.iTrace) 文件调试应用程序

Dd264915.collapse_all(zh-cn,VS.110).gif博客

Visual Studio ALM + Team Foundation Server

Dd264915.collapse_all(zh-cn,VS.110).gif论坛

Visual Studio 2010 2010 Videos(Visual Studio 2010 视频)

Dd264915.collapse_all(zh-cn,VS.110).gif指南

使用 Visual Studio 2012 持续传送的测试–第 6 章:测试工具箱

Dd264915.collapse_all(zh-cn,VS.110).gif视频

第 9 频道:收集和分析 IntelliTrace 数据