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

使用 IntelliTrace 记录和跟踪你代码的执行历史记录时,可缩短在 Visual Studio Ultimate 中调试应用程序所用的时间。 你可以更轻松地发现 Bug,而无需设置很多断点,因为 IntelliTrace 支持你:

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

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

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

  • 调试难以重现或在部署中出现的错误。

下面是记录事件如何帮助你查找代码中的 Bug:

仅 IntelliTrace 事件 - 高级流

您希望做什么?

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

  • 我想查看以前的事件。

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

  • 保存我的 IntelliTrace 会话。

  • 控制 IntelliTrace 收集的数据。

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

从已部署的应用程序收集 IntelliTrace 数据

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

FAQ

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

  • 为何使用 IntelliTrace 进行调试?

  • IntelliTrace 收集哪些数据?

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

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

支持

有限支持

  • 实验证明的 F# 应用程序

  • 仅支持事件的 Windows 应用商店应用

不支持

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

  • Windows 服务、Silverlight、Xbox 或 Windows Mobile 应用

备注

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

为何使用 IntelliTrace 进行调试?

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

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

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

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

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

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

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

  • 发生异常。

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

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

    可以从 Microsoft 测试管理器中收集 IntelliTrace 数据,将该数据保存到 .iTrace 文件,并将此文件附加到 Team Foundation Server 工作项以备以后调查使用。 请参见在手动测试中收集更多诊断数据使用保存的 IntelliTrace 数据调试应用

  • 在部署中运行的应用程序中出现 Bug 或发生崩溃。

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

    对于 IIS 7.0、7.5 和 8.0 上托管的 ASP.NET Web 应用程序,以及 SharePoint 2010 或 SharePoint 2013 应用程序,请使用 Microsoft Monitoring Agent(单独使用或与 System Center 2012 一起使用),以备将 IntelliTrace 数据保存到 .iTrace 文件中。

    当你需要诊断部署中的应用程序的问题时,这会很有用。 请参阅通过使用 IntelliTrace 独立收集器来收集生成的诊断数据

IntelliTrace 收集哪些数据?

收集事件信息

默认情况下,IntelliTrace 只记录 IntelliTrace 事件。 这些是调试器事件、异常、.NET Framework 事件以及可以帮助你进行调试的其他系统事件。 你可以选择想要收集的 IntelliTrace 事件的类型(始终收集的调试器事件和异常除外)。 请参阅配置 IntelliTrace 以收集调试信息.

  • 调试器事件

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

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

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

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

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

  • 异常

    IntelliTrace 会记录异常类型和以下各类异常的消息:

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

    • 未经处理的异常

  • .NET Framework 事件

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

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

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

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

    你可以为在 Visual Studio 外运行的 SharePoint 2010 和 2013 应用程序记录用户配置文件事件以及一部分统一日志记录系统 (ULS) 事件。 你可以将这些事件保存到 .iTrace 文件中。 要求 Visual Studio Ultimate 2013Microsoft Monitoring Agent跟踪模式下运行。

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

    请参阅:

收集函数调用信息

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

  • 函数名

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

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

  • 指向第一级子对象的指针,而不是它们的值,除非它们为 null

备注

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

请参阅配置 IntelliTrace 以收集调试信息.

收集模块信息

若要控制 IntelliTrace 收集的调用信息量,请仅指定你关注的模块。 这有助于提高应用程序在收集期间的性能。 请参阅配置 IntelliTrace 以收集调试信息

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

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

收集调用信息可能会明显减慢你的应用程序。 它还可能增加你保存到磁盘上的 IntelliTrace 日志文件(.iTrace 文件)的大小。 若要尽可能减少这些影响,请仅收集你关注的模块的调用信息。 若要更改 .iTrace 文件的最大大小,请转到**“工具”“选项”IntelliTrace“高级”**。 请参阅配置 IntelliTrace 以收集调试信息

在何处可以获取详细信息?

调试时使用 IntelliTrace 记录代码执行

配置 IntelliTrace 以收集调试信息

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

部署之后设置发行版本以诊断问题

使用保存的 IntelliTrace 数据调试应用

博客

Visual Studio ALM + Team Foundation Server

论坛

Visual Studio 诊断

指南

使用 Visual Studio 2012 测试连续交付 - 第 6 章:测试工具箱