Visual Studio 客户体验改善计划(VSCEIP)旨在帮助Microsoft随着时间的推移改进 Visual Studio。 此程序 收集有关错误、计算机硬件以及人们如何使用 Visual Studio 的信息,而不会中断用户在计算机的任务中。 收集的信息有助于Microsoft确定要改进的功能。 本文档介绍如何 选择加入或退出 VSCEIP,并提供一些有关我们收集的数据类型以及如何使用它的信息。 它还提供有关扩展作者如何避免无意中泄露个人或敏感信息的提示。
选择退出诊断数据收集
鉴于我们收集的数据的目的及其访问和保留的约束,我们建议你对 Visual Studio 和 Windows 使用默认隐私设置。 但是,可以选择 退出 Visual Studio 体验改善计划。 选择退出时,可以选择退出 可选的 诊断数据收集。 需要一些诊断数据收集,以确保 Visual Studio 安全、最新且按预期执行。 所需的诊断数据收集不会受到选择退出 VSCEIP 的影响。
注释
如果您有兴趣查看或删除个人数据,请查阅Microsoft关于GDPR下Windows数据主体请求的指南。 如果要查找有关 GDPR 的一般信息,请参阅 服务信任门户的 GDPR 部分。
注释
VSCEIP 遥测选择加入或退出设置不适用于 Visual Studio 中的“报告问题”。 仅在您单击“提交”按钮并提供权限时,问题日志才会被收集并发送给微软。 如果有兴趣在提交到“报告问题”之前管理日志,请参阅 反馈数据隐私 以获取更多详细信息。
选择加入或退出
VSCEIP 默认处于打开状态。 可以按照以下说明将其关闭或重新打开:
在 Visual Studio 中,选择 “帮助>隐私>设置”。
此时会打开 Visual Studio 体验改善计划 对话框。
若要选择退出,请选择“ 否”,我不想参与,然后选择“ 确定”。 若要选择加入,请选择“ 是”,我愿意参与(建议),然后选择“ 确定”。
注册表设置
如果安装 用于 Visual Studio 的生成工具,则必须更新注册表以配置 VSCEIP。 企业客户可以通过设置基于注册表的策略来构造组策略来选择加入或退出 VSCEIP。
相关的注册表项和设置如下所示:
- 在 64 位 OS 上,密钥 = HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VSCommon\16.0\SQM
- 在 32 位 OS 上,密钥 = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSCommon\16.0\SQM
- 启用组策略后,密钥 = HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\VisualStudio\SQM
- 在 64 位 OS 上,密钥 = HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VSCommon\17.0\SQM
- 在 32 位 OS 上,密钥 = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSCommon\17.0\SQM
- 启用组策略后,密钥 = HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\VisualStudio\SQM
Entry = OptIn
值 = (DWORD)
- 0 已选择退出(关闭 VSCEIP)
- 1 已选择加入(打开 VSCEIP)
注意
不正确地编辑注册表可能会对系统造成严重损坏。 在更改注册表之前,应备份计算机上任何有价值的数据。 如果在应用手动更改后遇到问题,还可以使用《上次已知良好配置》启动选项。
有关 VSCEIP 收集、处理或传输的信息的详细信息,请参阅 Microsoft隐私声明。
系统生成的日志由 Visual Studio 收集
Visual Studio 收集系统生成的日志,以解决问题并提高产品质量。 下面是一些有关我们收集的数据类型及其使用方式的信息。 它还提供有关扩展作者如何避免无意中泄露个人或敏感信息的提示。
收集的数据类型
Visual Studio 收集系统生成的日志,用于崩溃、UI 无响应以及 CPU 或内存使用率高。 我们还收集有关在产品安装或使用过程中遇到的错误的信息。 收集的数据因错误而异,可能包括堆栈跟踪、内存转储和异常信息:
为了获得较高的 CPU 使用率和无响应性,会收集相关 Visual Studio 线程的堆栈跟踪。
对于某些线程的堆栈跟踪不足以确定问题的根本原因(例如崩溃、无响应或内存使用率过高的情况),我们将收集内存 转储。 转储表示发生错误时进程的状态。
对于意外的错误条件,例如,尝试写入磁盘上的文件时出现异常时,我们会收集有关异常的信息。 该信息包括异常的名称、发生异常的线程的堆栈跟踪、与异常关联的消息以及与特定异常相关的其他信息。
以下收集的数据示例显示了异常名称、堆栈跟踪和异常消息:
"Reserved.DataModel.Fault.Exception.TypeString": "System.IO.IOException", "Reserved.DataModel.Fault.Exception.StackTrace": "System.IO.__Error.WinIOError(Int32,String)\r\n System.IO.FileStream.Init(String,FileMode,FileAccess,Int32,Boolean,FileShare,Int32,FileOptions,SECURITY_ATTRIBUTES,String,Boolean,Boolean,Boolean)\r\n System.IO.FileStream..ctor(String,FileMode,FileAccess,FileShare,Int32,FileOptions,String,Boolean,Boolean,Boolean)\r\nSystem.IO.StreamWriter.CreateFile(String,Boolean,Boolean)\r\n System.IO.StreamWriter..ctor(String,Boolean,Encoding,Int32,Boolean)\r\n System.IO.StreamWriter..ctor(String,Boolean)\r\n System.IO.File.CreateText(String)\r\n Microsoft.VisualStudio.Setup.Services.FileSystem.CreateText(String,Boolean)\r\n Microsoft.VisualStudio.Setup.Cache.ChannelManifestRepository.WriteChannelManifest(IChannelManifest,String,String)\r\n Microsoft.VisualStudio.Setup.Cache.ChannelManifestRepository.AddChannel(ChannelManifestPair,Boolean)\r\n Microsoft.VisualStudio.Setup.Cache.CacheManager.AddChannel(ChannelManifestPair,Boolean)\r\n Microsoft.VisualStudio.Setup.ChannelManager.\<UpdateAsync>d__37.MoveNext()\r\n”, "Reserved.DataModel.Fault.Exception.Message": " The process cannot access the file 'C:\\Users\\[UserName]\\AppData\\Local\\Microsoft\\VisualStudio\\Packages\\_Channels\\4CB340F5\\channelManifest.json' because it is being used by another process."
如何使用系统生成的日志
确定错误的根本原因的工作流因错误类型和严重性而异。
错误分类
根据日志,对错误进行分类和计数,以确定调查的优先级。 例如,我们可能会发现“System.IO.FileStream.Init”处的“System.IO.__Error.WinIOError”在产品的<x>版本中发生了500次,并且在该版本中出现的频率最高。
用于跟踪的工作项
为单个优先级错误创建工作项,并分配给工程师进行调查。 这些工作项通常包含与错误类型相关的分类、优先级和诊断信息。 此信息派生自收集的系统生成的错误日志。 例如,一个关于崩溃的工作项可能包含发生崩溃位置的堆栈跟踪。
错误调查
工程师使用工作项中提供的信息来确定错误的根本原因。 在某些情况下,他们需要比工作项中包含的信息更多的信息,因此他们查看系统生成并收集的原始日志。 例如,工程师可能会检查内存转储文件以了解产品崩溃。
扩展作者建议
扩展作者应限制个人信息公开,方法是不要在其模块、类型和方法的名称中使用个人或其他敏感信息。 如果堆栈上的代码出现崩溃或类似的错误条件,则会收集该信息作为系统生成的日志的一部分。