打开可操作bug的步骤

你好,我是Vaishnavi Sannidhanam,从VisualC++编译器后端团队测试线索。我加入Visual C++团队4年 并帮助运送VS2005和VS2008。在这个博客中,我想向您介绍一种最有效的向我们报告可操作bug的方法。

null

当您发现一个bug时,最好的报告方法是通过Microsoft Connect与我们联系。要通过Microsoft Connect报告错误,请打开“连接”页( https://connect.microsoft.com/ )点击“ “您的仪表板” . 选择bug所属的项目并继续打开bug。

描述你为什么要做你正在做的事情,帮助我们理解和评估这个bug修复对你的重要性。

一个复制只是一系列的步骤来重现你所看到的行为。给我们一个机会总是有用的,机会越小对我们越好。有时,由于复制程序的大小,您可能无法通过Microsoft Connect连接复制程序。如果是这样的话,请在错误中做一个记录,你有一个复制品,你不能附加,我们将作出其他安排,从你那里得到。如果你能提供我们预期的和实际的行为,那也太好了。对于与UI/可访问性/本地化相关的问题,如果您给我们一个坏行为的屏幕截图,这将非常有用。如果您能告诉我们您在哪个版本的产品中发现了错误,这也将是非常有价值的。

下面是一些特定的问题,其中与bug相关的特殊信息将极大地帮助我们

1. 项目转换问题 :当打开的bug包含以下信息时,它将对我们非常有帮助

1.1. 原始项目文件

1.2. 转换日志(upgradelog*.xml,可在解决方案或项目目录中找到,具体取决于转换的内容)

1.3. 您遇到的问题的描述

2. Visual Studio崩溃 :这些通常作为Watson的报告向我们报告,因此无需做进一步的工作。但是,如果由于某种原因您没有得到Watson提示,您可以打开一个bug,其中repro步骤详细说明了VS的版本、项目的类型(非常欢迎您与我们分享项目,因为这样可以提高我们重现崩溃的机会)、您执行的导致VS崩溃的一系列操作,如果崩溃发生在Win7上,那么通常在崩溃后附加调试器的JIT窗口将不会显示,默认情况下设置会隐藏它。  如果您想通过问题进行调试,以下是打开调试器的步骤:

2.1. 转到控制面板 à 系统与安全 à 行动中心 à 更改操作中心设置 à 问题报告设置

2.2. 选择“每次出现问题时,在检查解决方案之前询问我”

或者,如果您的组策略阻止此设置,您可以单击“选择要从报告中排除的程序”并添加–%%ProgramFiles%%Microsoft Visual Studio 10.0Common7IDEdevenv.exe和%%ProgramFiles%%Microsoft Visual Studio 10.0vcpackagesvcpkgsvr.exe

3. Intellisense故障和浏览相关问题: 您可以使用新的dev10特性来启用日志记录。要启用此功能,可以转到“工具” à 选项 à 文本编辑器 à C++ à 高级 à 记录级别,并将其设置为true,级别设置为5。默认情况下,这是禁用的。一旦启用,您就可以重现问题并附加结果日志。您可以通过选择“输出”窗口查看此日志 Visual C++日志 ”.

4. 内存消耗问题: 如果您让我们知道正在使用的内存量以及导致这种情况发生的操作类型的详细描述,我们将更容易跟踪内存问题。将您的项目或显示此问题的项目作为repro案例进行共享,将极大地提高我们复制此bug的能力。您还可以使用sysinternals工具vmmap( http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx )要查看各种内存指标,如虚拟内存、工作集、本机堆、托管堆等,可以通过运行vmmap.exe、在高内存状态下附加到devenv.exe并从菜单中选择“保存”来创建vmmap文件。  这就保存了一些关于内存在系统中如何使用的数据,这使我们能够更容易地找到从哪里开始查找问题。您也可以将此文件附加为bug的一部分。

5. 项目生成问题: 详细的构建日志将非常有帮助,当你击中项目  构建问题。您可以通过进入“工具”启用详细日志记录 à 选项 à 项目和解决方案 à 生成并运行,在IDE Build中将“MSBuild Project Build output verbosity”设置为“Diagnostic”,或将/v:diag开关传递到命令行生成的MSBuild。如果您还可以提供以前版本的visualstudio的生成日志,这将非常有用。

6. 编译时问题: 你可以制作一个 预处理文件或链接复制 取决于你遇到了什么样的问题。有关如何生成这些文件的步骤,请参见 http://support.microsoft.com/kb/974229 . 另外,在编译时收集所有正在使用的开关也是很有用的。默认情况下,传递给编译器的开关不会显示在输出窗口中,您可以通过转到 工具 à 选项 à 项目和解决方案 à 生成并运行,将“MSBuild Project Build output verbosity”设置为“Diagnostic”。

预处理文件:

最好的repro是源代码的一小部分,它自己编译,没有任何依赖关系,并生成一个可执行文件来重现问题。如果你有这种无依赖的复制品,请把它和你观察到的错误行为以及你认为正确的行为一起报告。然而,产生一个无依赖的复制品是非常困难和耗时的。这就是为什么下一种最好的复制是一个预处理的文件。

对于托管代码,如果您将预处理文件(按照上面的说明)与 编译期间引用的所有程序集。通过将/showcludes添加到命令行或单击“无项目特性”,可以找出引用了哪些程序集 à 配置属性 à C/C++ à 高级 à 显示包括 à 是的

报告预处理器中的错误:

对于预处理器中的bug(即编译/P或/EP不能产生您认为应该产生的结果),一个更复杂的repro可以帮助我们解决。精心制作的repro只不过是一个主要的源文件,您在其中注意到了问题以及主要源文件包含的所有其他文件。

获取所有源文件的最简单方法是使用/showcludes构建您的repro case。这将列出编译期间引入的所有文件。如果您将所有这些文件复制到一个目录中,您应该能够独立于sourcebase的其余部分来重现问题。例如,您应该能够设置INCLUDE=。仍然能够生成一个对象文件。

链接复制:

在LTCG和非LTCG情况下,当在链接时间内发生错误时,使用链接复制。

为Profile-Guided Optimization(PGO)问题生成repos:Instrumented Build的问题, i、 e.通过/PGI,只需按照链接repro说明进行操作 http://support.microsoft.com/kb/974229 . 所有需要的文件将被复制到link repro目录。

要为Profile-Guided Optimization(PGO)问题生成repro:优化构建的问题,即passing/PGO,只需按照链接repro说明进行操作 http://support.microsoft.com/kb/974229 . 此外,还包括场景中导致要报告的问题的.PGC文件。

7. 应用程序运行时问题:

浮点精度问题

在使用上述技术缩小复制品尺寸后,让我们知道您的预期结果以及我们正在生产的产品对我们来说非常有价值。当我们决定何时修复错误时,帮助我们理解这个精度错误对您的产品有什么样的影响对我们也很有用。您可能还想查看编译器提供的各种浮点选项,这些选项可以帮助您在精度和性能之间进行选择( http://msdn.microsoft.com/en-us/library/e7s85ffb(对100).aspx ).

应用程序崩溃

当你的应用程序崩溃,你认为这是一个编译器的问题,因为

你在代码里没有发现任何错误

您可以看到,此崩溃发生在升级后的新版本上,而不会发生在旧版本上

您可以看到崩溃只发生在发布模式下,而不是在调试模式下

在这些情况下,您可以向我们提供显示这种行为的源代码。我们真的很感激,如果这是一个减少重审案件,因为这极大地帮助了我们 缩小问题的范围。

感谢您阅读本博客。我希望这个博客能让你打开可操作的bug,从而帮助我们推出更高质量的产品。谢谢你给我们的产品添麻烦。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享