适用于 Visual Studio Enterprise 的 IntelliTrace (C#、Visual Basic、C++)

使用 IntelliTrace 记录和跟踪代码的执行历史记录时,可以花费更少的时间调试应用程序。 可以轻松查找 bug,因为 IntelliTrace 允许你:

  • 记录特定事件

  • 检查相关代码、调试器事件期间“ 局部变量 ”窗口中显示的数据以及函数调用信息

  • 调试那些难以重现或者在部署中发生的错误

可以在 Visual Studio Enterprise 版本(但不能使用专业版或社区版)中使用 IntelliTrace。

你希望做什么?

情景 标题
使用 IntelliTrace 调试应用程序:

- 给我展示过去的活动。
- 显示我与过去活动相关的通话信息。
- 保存 IntelliTrace 会话。
- 控制 IntelliTrace 收集的数据。
- 使用 IntelliTrace 检查以前的应用状态
- 教程:使用 IntelliTrace
- IntelliTrace 功能
- 历史调试
从已部署的应用程序收集 IntelliTrace 数据 - 使用 IntelliTrace 独立收集器
从 IntelliTrace 日志文件(.iTrace 文件)开始调试。 - 使用保存的 IntelliTrace 数据

可以使用 IntelliTrace 调试哪些应用?

支持级别 应用程序类型
完全支持 - 使用 .NET Framework 2.0 或更高版本的 Visual Basic 和 Visual C# 应用程序。
可以调试大多数应用程序,包括 ASP.NET、Microsoft Azure、Windows 窗体、WCF、WPF、Windows 工作流、SharePoint 2010、SharePoint 2013 和 64 位应用。
若要使用 IntelliTrace 调试 SharePoint 应用程序,请参阅 演练:使用 IntelliTrace 调试 SharePoint 应用程序
若要使用 IntelliTrace 调试 Microsoft Azure 应用程序,请参阅 使用 IntelliTrace 和 Visual Studio 调试已发布的云服务
有限支持 - C++面向 Windows 的应用支持使用 IntelliTrace 逐步回溯来查看快照。 仅支持调试器和异常事件。
- 在本地调试中,.NET Core 和 ASP.NET Core 应用仅支持某些事件(MVC 控制器、ADO.NET 和 HTTPClient 事件)。 .NET Core 或 ASP.NET Core 应用不支持独立收集器。
- 实验性基础上的 F# 应用
仅限事件支持的 UWP 应用
不支持 - 其他语言和脚本
- Windows 服务、Silverlight、Xbox 或 Windows 移动应用

注释

如果要调试正在运行的进程,则只能收集 IntelliTrace 事件(无调用信息)。 只能在本地计算机上附加到 32 位或 64 位进程。 在您附加到进程之前发生的事件将不会被收集。

为何使用 IntelliTrace 进行调试?

传统或 实时 调试仅显示应用程序的当前状态,有关过去事件的数据有限。 必须根据应用程序的当前状态推断这些事件,或者必须重新运行应用程序来重新创建这些事件。

IntelliTrace 通过在这些时间点记录特定事件和数据来扩展这种传统的调试体验。 这样,便可以在应用程序中查看所发生的情况,而无需重启它,尤其是在你跳过了 bug 所在的位置时。 在传统调试期间,IntelliTrace 默认处于打开状态,并自动和不可见地收集数据。 这样,便可以在传统调试和 IntelliTrace 调试之间轻松切换,以查看记录的信息。 请参阅 IntelliTrace 功能 以及 IntelliTrace 收集哪些数据?

IntelliTrace 还可以帮助你调试那些难以重现或在部署时发生的错误。 可以收集 IntelliTrace 数据并将其保存到 IntelliTrace 日志文件(.iTrace 文件)。 .iTrace 文件包含有关异常、性能事件、Web 请求、测试数据、线程、模块和其他系统信息的详细信息。 可以在 Visual Studio Enterprise 中打开此文件,选择一项,然后开始使用 IntelliTrace 进行调试。 这样,便可以转到文件中的任何事件,并在该时间点查看有关应用程序的特定详细信息。

可以从以下源保存 IntelliTrace 数据:

下面是 IntelliTrace 如何帮助你进行调试的一些示例:

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

    如果没有 IntelliTrace,必须浏览代码以查找所有可能的文件访问,在这些访问上放置断点,然后重新运行应用程序以查找问题发生的位置。 借助 IntelliTrace,可以在发生每个事件时查看所有收集的文件访问事件和有关应用程序的特定详细信息。

  • 发生异常。

    如果没有 IntelliTrace,会收到有关异常的消息,但有关导致异常的事件的信息并不多。 可以检查调用堆栈以查看导致异常的调用链,但看不到这些调用期间发生的事件序列。 借助 IntelliTrace,可以检查异常之前发生的事件。

  • 部署的应用程序中发生了漏洞或崩溃。

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

    对于承载在 IIS 7.0、7.5 和 8.0 和 SharePoint 2010 或 SharePoint 2013 应用程序上的 ASP.NET Web 应用,请单独或与 System Center 2012 一起使用Microsoft监视代理,将 IntelliTrace 数据保存到 .iTrace 文件。

    如果要诊断部署中的应用问题,这非常有用。 请参阅 使用 IntelliTrace 独立收集器

IntelliTrace 收集哪些数据?

收集事件信息

默认情况下,IntelliTrace 仅记录 IntelliTrace 事件:调试器事件、异常、.NET Framework 事件和其他可帮助进行调试的系统事件。 可以选择要收集的 IntelliTrace 事件类型,不过调试器事件和异常始终会被自动收集。 请参阅 IntelliTrace 功能

  • 调试器事件

    IntelliTrace 始终记录 Visual Studio 调试器中发生的事件。 例如,启动应用程序是调试器事件。 其他调试器事件属于停止事件,会导致应用程序中断执行。 例如,程序命中断点、命中跟踪点或执行 步骤 命令。

    默认情况下,为了帮助提高性能,IntelliTrace 不会记录调试器事件的每个可能值。 而是记录以下值:

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

    • 仅当“自动”窗口处于打开状态时,“自动”窗口中才会显示值。

    • 在源窗口中将鼠标指针移到变量顶部以查看其值时出现的数据提示中的值。 IntelliTrace 不会收集固定数据提示中的值。

      启用 IntelliTrace 事件和快照模式后,IntelliTrace 会在每个调试器 断点步骤 事件上拍摄应用程序的进程的快照。 这将记录 局部变量自动监视 窗口中的值,而不考虑窗口是否处于打开状态。 还将收集任何固定数据提示中的值。

  • 异常

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

    • 处理了引发和捕获异常的异常

    • 未经处理的异常

  • .NET Framework 事件

    默认情况下,IntelliTrace 记录最常见的 .NET Framework 事件。 例如,对于 CheckBox.CheckedChanged 事件,IntelliTrace 收集复选框状态和文本。

  • SharePoint 2010 和 SharePoint 2013 应用程序事件

    您可以记录用户配置文件事件以及在 Visual Studio 外部运行的 SharePoint 2010 和 2013 应用程序的统一日志记录系统(ULS)事件的子集。 可以将这些事件保存到 .iTrace 文件。 需要 Visual Studio Enterprise 2015 或更高版本、早期版本的 Visual Studio Ultimate,或在跟踪模式下运行的Microsoft 监视代理

    打开 .iTrace 文件时,输入 SharePoint 相关 ID 以查找其匹配的 Web 请求、查看记录的事件,并从特定事件开始调试。 如果文件包含未经处理的异常,则可以选择相关 ID 以开始调试异常。

    请参阅:

捕获快照

可以将 IntelliTrace 配置为在每个断点和调试器步骤事件中捕获快照。 IntelliTrace 记录每个快照的完整应用程序状态,这样就可以查看复杂变量并计算表达式。

注释

IntelliTrace 独立收集器不支持捕获快照。

请参阅 使用 IntelliTrace 检查以前的应用状态

收集函数调用信息

可以将 IntelliTrace 配置为收集函数的调用信息。 此信息使你可以看到调用堆栈的历史记录,并允许在代码中向后和向前推进调用。 对于每个函数调用,IntelliTrace 都会记录以下数据:

  • 函数名称
  • 在函数入口点传递为参数的原始数据类型值,并在函数退出点返回
  • 自动属性被读取或更改时的值
  • 指向第一级子对象的指针,但不包括它们的值,除非这些值是 null 或不是 null。

注释

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

请参阅 使用历史调试功能来检查您的应用程序

收集模块信息

若要控制 IntelliTrace 收集的调用信息量,请仅指定你关心的那些模块。 这有助于提高收集期间应用程序的性能。 请参阅 “控制 IntelliTrace 功能中 IntelliTrace 收集的信息量 ”部分。

IntelliTrace 是否会减慢应用程序的速度?

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

收集调用信息可能会显著降低应用程序的速度。 它还可能会增加要保存到磁盘的任何 IntelliTrace 日志文件(.iTrace 文件)的大小。 若要最大程度地减少这些影响,请仅收集你关注的模块的调用信息。 若要更改 .iTrace 文件的最大大小,请转到 “工具”、“ 选项”、“ IntelliTrace”、“ 高级”。

博客

Microsoft DevOps

论坛

Visual Studio 诊断