使用独立收集器收集 Visual Studio 外部的 IntelliTrace 数据
要在生产或其他环境中调试应用程序,请使用 IntelliTrace 回收器将诊断数据保存至 IntelliTrace 日志文件(.iTrace 文件)。 这可让您在不安装 Visual Studio 或更改应用程序环境的情况下记录应用程序中发生的事件。 当收集数据完成时,删除回收器以将其卸载。
监视工作中的 IntelliTrace:收集并分析生产中要调试的 IntelliTrace 数据 (Channel 9 video)
要求
.NET Framework 3.5、4 或 4.5
开发计算机或其他计算机上具有 Visual Studio 旗舰版可打开 .iTrace 文件
备注
确保将您的符号 (.pdb) 文件进行保存。要使用 IntelliTrace 进行调试和逐句执行代码,必须拥有匹配的源文件和符号文件。请参见 查找符号 (.pdb)、源和二进制文件。
FAQ
哪些应用程序使用该回收器?
如何启动?
如何获取大多数数据,而无需减慢应用程序?
获取其他地方的 IntelliTrace 数据?
哪些应用程序使用该回收器?
ASP.NET Web 应用程序承载于 Internet 信息服务 (IIS) 7.0、 7.5 和 8.0 版本上
SharePoint 2010 应用程序
托管桌面应用程序(.exe 文件)
如何启动?
安装该回收器
Set up permissions for the collector directory.
安装 IntelliTrace PowerShell cmdlets,以收集 Web 应用程序或 SharePoint 应用程序的数据。
设置 .iTrace 文件目录的权限
从 Web 应用程序或 SharePoint 应用程序收集数据
- 或 -
从托管应用程序中收集数据
在 Visual Studio 旗舰版中打开 .iTrace 文件。
安装该回收器
在您的应用程序服务器上,创建回收器目录,例如:C:\IntelliTraceCollector
从 Microsoft 下载中心或从 Visual Studio 安装文件夹获取收集器:
Microsoft 下载中心:
在您的应用程序服务器上,转到 IntelliTrace Collector for Visual Studio。
在 IntelliTraceCollector.exe 旁边,选择**“下载”**。
将 IntelliTraceCollector.exe 保存在回收器目录中,例如:C:\IntelliTraceCollector
运行 IntelliTraceCollector.exe。 这将提取 IntelliTraceCollection.cab 文件。
- 或 -
Visual Studio 安装文件夹:
备注
要获取支持 SharePoint 2010 应用程序诊断事件的回收器,请下载 IntelliTrace Collector for Visual Studio(IntelliTrace Visual Studio 回收器),或确保已安装 Visual Studio 2012.1。
从以下文件夹复制 IntelliTraceCollection.cab:
.. \Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\IntelliTrace\11.0.0
将 IntelliTraceCollection.cab 放置在回收器目录中,例如:C:\IntelliTraceCollector
展开 IntelliTraceCollection.cab:
在您的应用程序服务器上,以管理员身份打开命令提示窗口。
浏览至回收器目录,例如:C:\IntelliTraceCollector
使用 expand 命令,在末尾包含句点(“.”)以展开 IntelliTraceCollection.cab:
展开 /f: * IntelliTraceCollection.cab。
备注
句点(“.”)保留了包含本地化集合计划的子文件夹。
设置回收器目录的权限
在您的应用程序服务器上,以管理员身份打开命令提示窗口。
使用 Windows icacls 命令授予服务器管理员访问回收器目录的全部权限。 例如:
icacls "C:\IntelliTraceCollector" /grant " <Domain\AdministratorID> ":F
要收集 Web 应用程序或 SharePoint 应用程序的数据:
赋予要运行 IntelliTrace PowerShell cmdlets 的人员使用回收器目录的完全权限。
例如:
icacls "C:\IntelliTraceCollector" /grant " <Domain\UserID> ":F
赋予 Web 应用程序或 SharePoint 应用程序的应用程序池读取和执行回收器目录的权限。
例如:
对于 DefaultAppPool 应用程序池中的 Web 应用程序:
icacls "C:\IntelliTraceCollector" /grant "IIS APPPOOL\DefaultAppPool":RX
对于 SharePoint - 80 应用程序池中的 SharePoint 应用程序:
icacls "C:\IntelliTraceCollector" /grant "IIS APPPOOL\SharePoint - 80":RX
安装 IntelliTrace PowerShell cmdlets,以收集 Web 应用程序或 SharePoint 应用程序的数据。
在您的应用程序服务器上,确保 PowerShell 已启用。 在 Windows Server 的大多数版本中,您可以在**“服务器管理器”**管理工具中添加此功能。
安装 IntelliTrace PowerShell cmdlet。
以管理员身份打开 PowerShell 命令窗口。
选择**“开始”、“所有程序”、“附件”、“Windows PowerShell”**。
选择以下步骤之一:
在 64 位操作系统上,打开**“Windows PowerShell (x86)”的快捷菜单。 选择“以管理员身份运行”**。
在 32 位操作系统上,打开**“Windows PowerShell (x86)”的快捷菜单。 选择“以管理员身份运行”**。
在 PowerShell 命令窗口中,请使用导入模块命令以导入 Microsoft.VisualStudio.IntelliTrace.PowerShell.dll。
例如:
导入模块“C:\IntelliTraceCollector\Microsoft.VisualStudio.IntelliTrace.PowerShell.dll”
设置 .iTrace 文件目录的权限
在您的应用程序服务器上,创建 .iTrace 文件目录,例如:C:\IntelliTraceLogFiles
备注
-
要避免减慢您应用程序的速度,请选择不是非常活动的本地高速磁盘的位置。
-
可将 .iTrace 文件和回收器文件放置到同一位置。但是,如果您拥有 Web 应用程序或 SharePoint 应用程序,请确保此位置在承载应用程序的目录之外。
安全说明 将 .iTrace 文件目录仅限于需要使用该回收器的标识。由于 IntelliTrace 可记录传递到方法参数的任何数据或返回值,因此 .iTrace 文件可能包含敏感信息,包括来自用户、数据库、其他源位置和连接字符串的数据。
确保可以打开 .iTrace 文件的人员具有查看敏感数据的权限。分享 .iTrace 文件时应谨慎小心。如果其他人必须拥有访问权,请将文件复制到安全共享位置。
-
对于 Web 应用程序或 SharePoint 应用程序,请将其应用程序池完全权限赋予 .iTrace 文件目录。 您可以使用窗口 icacls 命令或使用 Windows 资源管理器(或文件资源管理器)。
例如:
要使用 Windows icacls 命令设置权限:
对于 DefaultAppPool 应用程序池中的 Web 应用程序:
icacls "C:\IntelliTraceLogFiles" /grant "IIS APPPOOL\DefaultAppPool":F
对于 SharePoint - 80 应用程序池中的 SharePoint 应用程序:
icacls "C:\IntelliTraceLogFiles" /grant "IIS APPPOOL\SharePoint - 80":F
- 或 -
要使用 Windows 资源管理器(或文件资源管理器)设置权限:
打开 .iTrace 文件目录的**“属性”**。
在**“安全性”选项卡上,选择“编辑”、“添加”**。
确保**“内置安全主体”出现在“选择此对象类型”框。 如果不在其中,请选择“对象类型”**进行添加。
确定您的本地计算机出现在**“从此位置”框。 如果不在其中,请选择“位置”**进行更改。
在**“输入要选择的对象名称”**框中,添加 Web 应用程序或 SharePoint 应用程序的应用程序池。
选择**“检查名称”,以解决该名称。 选择“确定”**。
确定应用程序池具有**“完全控制”**。
从 Web 应用程序或 SharePoint 应用程序收集数据
要开始收集数据,请以管理员身份打开 PowerShell 命令窗口,然后运行此命令:
Start-IntelliTraceCollection "<ApplicationPool>" <PathToCollectionPlan> <FullPathToITraceFileDirectory>
重要
在运行此命令后,键入“Y”以确认您将开始收集数据。
例如,在 SharePoint - 80 应用程序池中收集 SharePoint 应用程序数据:
Start-IntelliTraceCollection "SharePoint - 80" "C:\IntelliTraceCollector\collection_plan.ASP.NET.default.xml" "C:\IntelliTraceLogFiles"
ApplicationPool
在其中运行应用程序的应用程序池名称
PathToCollectionPlan
集合计划路径,回收器配置设置的 .xml 文件。
您可以指定附带回收器的计划。 以下计划适用于 Web 应用程序和 SharePoint 应用程序:
collection_plan.ASP.NET.default.xml
仅收集 IntelliTrace 事件和 SharePoint 事件,包括异常、数据库调用和 Web 服务器请求。
collection_plan.ASP.NET.trace.xml
收集 collection_plan.ASP.NET.de fault.xml 中的函数调用和所有数据。 此计划有利于进行详细的分析,但与 collection_plan.ASP.NET.default.xml 相比,其可能会减慢应用程序的速度。
要避免减慢您应用程序的速度,请自定义这些计划或创建自己的计划。 有关安全性,请将任何自定义计划放置在与回收器文件相同的安全位置。 请参见 创建和自定义 IntelliTrace 收集计划 和 如何获取大多数数据,而无需减慢应用程序?
说明默认情况下,.iTrace 文件的最大大小为 100 MB。当 .iTrace 文件达到此限制时,回收器将删除文件中的最早项以便为新项留出空间。若要更改此限制,请编辑集合计划的 MaximumLogFileSize 特性。在何处可以找到这些集合计划的本地化版本?
可以在回收器的子文件夹中找到这些本地化计划。
FullPathToITraceFileDirectory
.iTrace 文件目录的完整路径。
安全说明提供完整路径,而不是相对路径。回收器附加到应用程序池并开始收集数据。
此时可以打开 .iTrace 文件?不能,数据收集期间将锁定文件。
重现问题。
若要获取 .iTrace 文件的快照,请使用此语法:
Checkpoint-IntelliTraceCollection "<ApplicationPool>"
要检查集合状态,请使用此语法:
获取 IntelliTraceCollectionStatus
若要停止收集数据,请使用此语法:
Stop-IntelliTraceCollection "<ApplicationPool>"
重要
在运行此命令后,键入“Y”以确认您要停止收集数据。否则,回收器可能继续收集数据,iTrace 文件将保持锁定,或者文件可能不包含任何有用的数据。
在 Visual Studio 旗舰版中打开 .iTrace 文件。
从托管应用程序中收集数据
要在启动应用程序的同时收集数据,请使用此语法:
<FullPathToIntelliTraceCollectorExecutable> \ IntellitraceSC.exe 启动 /cp: <PathToCollectionPlan> /f:<FullPathToITraceFileDirectoryAndFileName> <PathToAppExecutableFileAndFileName>
例如,从名为 MyApp 的应用程序收集数据:
C:\IntelliTraceCollector\IntelliTraceSC.exe launch /cp:"C:\IntelliTraceCollector\collection_plan.ASP.NET.default.xml" /f:"C:\IntelliTraceLogFiles\MyApp.itrace" "C:\MyApp\MyApp.exe"
FullPathToIntelliTraceCollectorExecutable
回收器可执行 IntelliTraceSC.exe 目录的完全路径
PathToCollectionPlan
集合计划路径,回收器配置设置的 .xml 文件。
您可以指定附带回收器的计划。 以下计划适用于托管应用程序:
collection_plan.ASP.NET.default.xml
仅收集 IntelliTrace 事件,包括异常、数据库调用和 Web 服务器请求。
collection_plan.ASP.NET.trace.xml
收集 collection_plan.ASP.NET.de fault.xml 中的函数调用和所有数据。 此计划有利于进行详细的分析,但与 collection_plan.ASP.NET.default.xml 相比,其可能会减慢应用程序的速度。
要避免减慢您应用程序的速度,请自定义这些计划或创建自己的计划。 有关安全性,请将任何自定义计划放置在与回收器文件相同的安全位置。 请参见 创建和自定义 IntelliTrace 收集计划 和 如何获取大多数数据,而无需减慢应用程序?
说明默认情况下,.iTrace 文件的最大大小为 100 MB。当 .iTrace 文件达到此限制时,回收器将删除文件中的最早项以便为新项留出空间。若要更改此限制,请编辑集合计划的 MaximumLogFileSize 特性。在何处可以找到这些集合计划的本地化版本?
可以在回收器的子文件夹中找到这些本地化计划。
FullPathToITraceFileDirectoryAndFileName
.iTrace 文件目录完整路径和带 .itrace 扩展的 .iTrace 文件名称。
安全说明提供完整路径,而不是相对路径。PathToAppExecutableFileAndFileName
您托管的应用程序的路径和文件名
通过退出 app 来停止数据收集。
在 Visual Studio 旗舰版中打开 .iTrace 文件。
在 Visual Studio 旗舰版中打开 .iTrace 文件。
将 .iTrace 文件移动或复制到具有 Visual Studio 旗舰版的计算机。
双击 Visual Studio 外的 .iTrace 文件或从 Visual Studio 内打开文件。
Visual Studio 将显示**“IntelliTrace 摘要”**页。 在大多数部分中,您可以查看事件或其他项,选择一个项,并在事件发送时的位置和时间点时用 IntelliTrace 开始调试。 请参见 使用 IntelliTrace 日志 (.iTrace) 文件调试应用程序。
备注
要使用 IntelliTrace 进行调试和逐句执行代码,必须拥有匹配的源文件和符号文件。确保符号文件是在 Visual Studio 符号路径中。否则,Visual Studio 无法解析源位置并显示消息“未找到符号”。请参见 查找符号 (.pdb)、源和二进制文件。
如何获取大多数数据,而无需减慢应用程序?
IntelliTrace 会收集大量数据,其对应用程序性能的影响取决于 IntelliTrace 收集的数据及其分析的代码类型。 请参见 优化生产服务器上的 IntelliTrace 收集。
下面提供了一些可以获得大多数数据而无需减慢应用程序的方法:
仅在您认为有问题或可能重现该问题时,才运行收集器。
启动集合,重现该问题,然后停止集合。 打开 Visual Studio 旗舰版中的 .iTrace 文件并检查数据。 请参见 在 Visual Studio 旗舰版中打开 .iTrace 文件。。
对于 Web 应用程序和 SharePoint 应用程序,该回收器记录共享指定的应用程序池的每个应用程序的数据。 即使您只在集合计划中指定单个 app 的模块,这也可能会减慢共享同一个应用程序池的任何 app。
为防止回收器减慢其他 app,应在每个 app 自己的应用程序池内承载 app。
检查集合计划中 IntelliTrace 收集数据的事件。 编辑集合计划来禁用不相关或不感兴趣的事件。
若要禁用一个事件,可将 <DiagnosticEventSpecification> 元素的 enabled 特性设置为 false:
<DiagnosticEventSpecification enabled="false">
如果 enabled 属性不存在,则事件已启用。
如何提高性能?
通过禁用不相关的应用程序您可以减少启动时间。 例如,禁用不使用 Windows 工作流的应用程序的 Windows 工作流事件。
您可以通过禁用访问应用程序的注册表事件但不显示使用注册表设置的问题来提高启动和运行时性能。
检查集合计划中 IntelliTrace 收集数据的模块。 编辑集合计划来仅包括关注您的模块:
打开集合计划。 找到 <ModuleList> 元素。
在 <ModuleList> 中,将 isExclusionList 特性设置为 false。
使用 <Name> 元素可以指定具有下列操作之一的每个模块:文件名、字符串值可以包括名称包含该字符串或公钥的任何模块。
例如,从 Fabrikam 纤程 Web 应用程序的主要 Web 模块中收集数据,请创建与此类似的列表:
<ModuleList isExclusionList="false"> <Name>FabrikamFiber.Web.dll</Name> </ModuleList>
若要从名称包括“Fabrikam”的所有模块中收集数据,请创建与此类似的列表:
<ModuleList isExclusionList="false"> <Name>Fabrikam</Name> </ModuleList>
若要通过指定的公钥标记组成从模块中收集数据,请创建与此类似的列表:
<ModuleList isExclusionList="false"> <Name>PublicKeyToken:B77A5C561934E089</Name> <Name>PublicKeyToken:B03F5F7F11D50A3A</Name> <Name>PublicKeyToken:31BF3856AD364E35</Name> <Name>PublicKeyToken:89845DCD8080CC91</Name> <Name>PublicKeyToken:71E9BCE111E9429C</Name> </ModuleList>
如何提高性能?
当应用程序启动和运行时,这会降低方法调用信息量和 IntelliTrace 收集的其他交互数据。 此数据可以:
逐句通过收集数据后的代码。
传递到检查值和从检查值返回函数调用。
为何不替换排除模块?
默认情况下,集合计划通过将 isExclusionList 特性设置为 true 来排除模块。 但是,不包括模块仍可能导致从不满足列表的条件和不感兴趣的模块中收集数据,如第三方或开放源代码模块。
是否有 IntelliTrace 不收集的任何数据?
是,为了降低性能影响,IntelliTrace 限制数据收集可以传递给基本数据类型的值和返回基本数据类型的值的方法,还可以传递给顶级字段的基本数据类型的值和返回顶级字段的基本数据类型的方法。
例如,假设您有接受一个整数 id 和一个 Employee 对象 oldemployee 的 AlterEmployee 方法签名:
public Employee AlterEmployee(int id, Employee oldemployee)
Employee 类型具有以下特性:Id、Name 和 HomeAddress。 关联关系存在 Employee 和 Address 类型之间。
回收器记录 id、 Employee.Id、 Employee.Name 和从 AlterEmployee 方法中返回的 Employee 对象的值。 但是,该回收器未记录有关 Address 对象是否为空以外的信息。 回收器还不记录有关 AlterEmployee 方法中的局部变量的数据,除非其他方法使用这些局部变量作为他们记录作为方法参数的点的参数。
获取其他地方的 IntelliTrace 数据?
从 Visual Studio 旗舰版中的 IntelliTrace 调试会话,请参见 使用 IntelliTrace 记录代码执行以便在 Visual Studio 中进行调试。
从 Microsoft 测试管理器中的测试会话,请参见 如何:收集 IntelliTrace 数据以帮助调试难题。
在何处可以获取更多信息?
使用 IntelliTrace 日志 (.iTrace) 文件调试应用程序
通过使用 IntelliTrace 记录代码执行来调试应用程序
博客
Visual Studio ALM + TFS Blog(Visual Studio MVP 博客)
论坛
Visual Studio 2010 2010 Videos(Visual Studio 2010 视频)