可以使用 IntelliTrace 记录应用程序的事件和方法调用,这样就可以在执行中的不同点检查其状态(调用堆栈和局部变量值)。 只需像往常一样开始调试 - 默认情况下,IntelliTrace 处于打开状态,你可以在“事件”选项卡下的“新诊断工具”窗口中看到 IntelliTrace 正在记录的信息。选择一个事件,然后单击“激活历史调试”以查看为此事件记录的调用堆栈和局部变量。
有关分步说明,请参阅 演练:使用 IntelliTrace。
IntelliTrace 在 Visual Studio Enterprise 版本中提供,但在 Visual Studio Professional 或 Community 版本中不可用。
若要确认 IntelliTrace 已打开,请打开 “工具 > 选项 > IntelliTrace 选项”页。 默认情况下应选中“启用 IntelliTrace”。
注释
IntelliTrace 选项页上所有设置的范围是 Visual Studio 整体,而不是单个项目或解决方案。 这些设置中的更改适用于 Visual Studio 的所有实例、所有调试会话和所有项目或解决方案。
选择 IntelliTrace 记录的事件(C#、Visual Basic)
可以打开或关闭特定 IntelliTrace 事件的录制。
如果正在调试,请停止调试。 转到 工具 > 选项 > IntelliTrace > IntelliTrace 事件。 选择要记录 IntelliTrace 的事件。
收集快照(C#、Visual Basic、C++)
默认情况下未启用此功能,但 IntelliTrace 可以在每个断点和调试器步骤事件中捕获应用程序的快照,并且可以在历史调试会话中查看这些快照。 快照为您提供应用程序完整状态的视图。 若要启用快照捕获,请转到 “工具 > 选项 > IntelliTrace > 常规”,然后选择 “IntelliTrace 快照”(托管快照和本机快照)。 有关详细信息,请参阅 使用 IntelliTrace 检查以前的应用状态。
快照在 Visual Studio Enterprise 2017 版本 15.5 及更高版本中可用,并且需要 Windows 10 周年更新或更高版本。 对于 .NET Core 和 ASP.NET Core 应用,需要 Visual Studio Enterprise 2017 版本 15.7。 对于面向 Windows 的本机应用,需要 Visual Studio Enterprise 2017 版本 15.9 预览版 2。
收集 IntelliTrace 事件和调用信息(C#、Visual Basic)
默认情况下未启用此功能,但 IntelliTrace 可以记录方法调用以及事件。 若要启用方法调用集合,请转到“工具>选项 > IntelliTrace > 常规”,然后选择 IntelliTrace 事件和调用信息(仅限托管)。
调用信息目前不适用于 .NET Core 和 ASP.NET Core 应用。
这样,便可以在代码中查看调用堆栈历史记录,并通过调用向后和向前推进。 IntelliTrace 记录方法名称、方法入口和退出点、某些参数值和返回值等数据。
小窍门
此选项默认未启用,因为它会增加相当大的开销。 IntelliTrace 不仅必须截获应用程序发出的每个方法,而且当涉及到在屏幕上显示数据或将其保存到磁盘时,还必须处理一组更大的数据。
可以通过限制 IntelliTrace 记录的事件列表以及将收集的模块数保持在最低水平来降低性能开销。 有关详细信息,请参阅 控制 IntelliTrace 记录的调用信息量。
使用导航栏边距
可以使用显示在代码窗口左侧的导航栏。 如果未看到导航装订线,请转到 “工具 > 选项 > IntelliTrace > 高级”,然后在 调试模式下选择“显示导航装订线”。
在历史调试模式下,导航槽允许您通过查看方法调用和事件向前和向后移动。 有关历史调试的详细信息,请参阅 历史调试。 它具有许多命令:
| Command | Description | 
|---|---|
| 在此处设置调试器上下文 | 将调试上下文设置为其出现的调用时间范围。 此图标仅显示在当前调用堆栈上。 | 
| 返回到调用点 | 将指针和调试上下文移回调用当前函数的位置。 如果处于实时调试模式,此命令将打开历史调试。 如果导航回原始执行中断,则会关闭历史调试并打开实时调试。 | 
| 返回上一个调用或 IntelliTrace 事件 | 将指针和调试上下文移回上一个调用或事件。 如果处于实时调试模式,此命令将打开历史调试。 | 
| 进入 | 进入当前选定的函数。 仅当处于历史调试模式时,此命令才可用。 | 
| 转到下一个调用或 IntelliTrace 事件 | 将指针和调试上下文移动到存在 IntelliTrace 数据的下一个调用或事件。 仅当处于历史调试模式时,此命令才可用。 | 
| 转到实时模式 | 返回到实时调试模式。 | 
在 IntelliTrace 中搜索行或方法
仅当启用了方法调用信息时,才能搜索方法。 可以搜索特定行或方法的 IntelliTrace 历史记录。 当调试器执行停止时,右键单击函数正文以查看上下文菜单,然后单击“ 在 IntelliTrace 中搜索此 LIne ”或 “在 IntelliTrace 中搜索此方法”。
控制 IntelliTrace 记录的调用信息数量
默认情况下,IntelliTrace 记录解决方案使用的所有模块的信息。 可以将 IntelliTrace 设置为仅记录感兴趣的模块的调用信息。 在 “工具 > 选项 > IntelliTrace > 模块”中,可以指定要包含的模块或要从 IntelliTrace 中排除的模块。 IntelliTrace 将仅收集源自你指定的模块的事件,以及你感兴趣的模块中发生的方法调用。
若要添加多个模块,请使用字符串开头或末尾的通配符 * 。 对于模块名称,请使用文件名,而不是程序集名称。 不接受文件路径。
尝试将模块数保持在最低水平。 获得更好的性能,因为要收集的数据更少。 此外,UI 中的噪音也更少,因为要经历的数据较少。
将 IntelliTrace 数据保存到文件(C#、Visual Basic、C++)
调试时,当应用程序处于中断状态时,可以通过调试 > IntelliTrace > 保存 IntelliTrace 会话 来保存 IntelliTrace 收集的数据。 菜单项处于禁用状态,如果应用程序仍在运行或已停止调试,将无法保存 IntelliTrace 收集的数据。
可以通过转到工具>选项>IntelliTrace>高级,然后选择“将 IntelliTrace 录制存储在此目录” 以将 IntelliTrace 配置为自动保存到文件。 还可以为生成的文件配置一个集大小,这会导致 IntelliTrace 在空间不足时对旧数据进行写入。 Visual Studio 会在自动保存每个 IntelliTrace 会话时为每个 IntelliTrace 会话创建两个文件,并打开 Visual Studio 托管进程(vshost.exe)。
小窍门
若要节省磁盘空间,请在不再需要文件时自动关闭保存文件。 不会删除任何现有文件。 您可以随时从上下文菜单中根据需要保存到文件中。
将 IntelliTrace 数据保存到文件中时,将获得 IntelliTrace 从中收集的每个进程的一个 .itrace 文件。 然后,可以通过在 Visual Studio 中依次转到
Blogs
Visual Studio Enterprise 2015 中的 IntelliTrace
Visual Studio Enterprise 2015 中的 IntelliTrace 现在支持附加!
使用 IntelliTrace 独立收集器从 Windows 服务收集数据
使用 IntelliTrace 自定义 TraceSource 和调试