【问题标题】:How to change debugger settings for debugging individual unit tests from VS 2015 Test Explorer如何更改调试器设置以从 VS 2015 测试资源管理器中调试单个单元测试
【发布时间】:2017-01-16 21:58:54
【问题描述】:

Test Explorer 允许在调试器下运行测试,我经常使用它来调试单个测试。但是,在这种情况下使用的调试器设置与为测试项目设置的设置不同,会妨碍高效调试。我想将调试限制为仅适用于 UWP 类库的托管模式,而调试器始终以混合本机/托管模式启动。这可以防止任何调试,因为 .NET Core 不支持混合模式调试。我在 VS 2015 上工作。

检查和测试所有可能的设置后,我未能将调试模式从混合切换到仅管理。有什么想法吗?

未解决:MEF 缓存的清理和重建在短时间内解决了问题。

调试失败并出现错误消息 无法附加到 CoreCLR。不支持互操作调试

【问题讨论】:

    标签: visual-studio unit-testing debugging uwp .net-core


    【解决方案1】:

    上述问题很可能是 Windows 运行时中的错误或调试器/coreclr 不匹配。使用 UWP 运行时版本 5.1.0 在托管、本机和混合模式下调试可以完美运行。通过将 UWP 运行时版本更新到 5.2.2 可以重现报告的问题。通过降级到 UWP 运行时 5.1.0 问题得到解决。我的VS版本是2015 Update 3.1。

    以上所有问题均在干净的 Windows 10 Pro 和 VS 2015 Update 3.1 安装上重现。

    有关 UWP 运行时 v5.2.2 的解决方法,请参阅评论 2

    【讨论】:

    • 如果您确定它与 UWP 运行时版本有关,建议您使用旧版本作为解决方法,然后将此问题报告给 Microsoft Connect 报告团队。当然,你也可以在这里分享一个简单的示例,我会在我这边测试,如果遇到和你一样的问题,我会帮你报告。
    • 很确定这是 UWP v5.2.2 运行时问题。可以通过在测试中抛出异常来重现错误,这将导致 UWP 测试应用程序崩溃,之后将尝试调试测试,即调用终结器中的内存访问冲突测试方法之外。如果运行时从默认使用的 v1.0.3 更新为随 .NET Core 1.0.1 发布的 v1.0.4,即使在 v5.2.2 运行时也将永久修复问题。这是我暂时推荐的解决方法。我的理解是该错误已在 .NET Core 运行时 v1.0.4 中修复。我们必须等待 UWP 运行时的下一个版本才能“正式”修复它。
    • 如果是这样,您可以在这里发布反馈:connect.microsoft.com/VisualStudio/feedback/CreateFeedback.aspx,这样您就可以直接从产品团队获得最新信息。当然,由于它在 .NET Core 运行时 v1.0.4 中运行良好,至少现在是一种解决方法,您可以在从连接报告团队获得任何信息之前将您的回复标记为临时答案。祝你有美好的一天:)
    • 我会做的。但是,测试框架 Microsoft.VisualStudio.PlatformTest.* 的崩溃表明另一个错误 -> 测试框架在执行终结器时不应崩溃,即使抛出异常也是如此。将向 VS 团队报告两者。
    • @AndrewJE 抱歉回复晚了,但您的消息今天出现在我的 stackexchange 收件箱中。我所做的步骤如下: 1. 升级到 UWP 5.2.2,而不是从运行时 v1.0.3 升级到 v1.0.4 - 问题似乎在运行时 v1.0.4 中得到解决,但不是 v1.0.3 附带的UWP v5.2.2
    【解决方案2】:

    为了扩展 Jacek Blaszczynski 的回答,我必须添加 Microsoft.NETCore.Runtime.CoreCLR 版本 1.0.4 nuget 包,以使其与 Microsoft.NETCore.UniversalWindowsPlatform 版本 5.2.2 一起使用。有趣的是,我无法使用当前版本 1.1.0。它甚至不会被安装。

    作为 MS Test 的替代方案,我建议使用 xUnit。它也适用于 UWP,不需要添加 Microsoft.NETCore.Runtime.CoreCLR nuget 包并且运行速度更快。 Here 是一个快速教程。

    【讨论】:

    • 确认 1.1.0 不适用于 UWP v5.2.2
    【解决方案3】:

    不支持互操作调试意味着您不能同时调试托管代码类型和本机代码类型。对于 CoreCLR 应用,使用 attach 处理并启用 CoreClr,再次调试。

    【讨论】:

    • 不幸的是,这不是问题本身的解决方案。我正在寻找可用于为从测试资源管理器启动的会话设置调试器的调试设置。显然我可以附加到测试过程但是......
    • 您的测试项目和之前的项目使用了哪种开发语言?您是否在 TOOLS->Options->Debugging 下启用或禁用调试选项“使用托管兼容模式”和“使用本机兼容模式”?对于一般的 C# 应用程序,如果要调试原生代码,可以在项目属性中找到“启用原生调试”。
    • C# 项目(在测试和目标项目中都使用)出现问题。 “使用托管兼容模式”和“使用本机兼容模式”这两个选项都被禁用(默认设置),项目设置(两者)都设置为托管调试。但是我注意到,在解决方案配置更改后,即从测试资源管理器从 x86 到 x64 调试是可能的,直到测试抛出除 AssertException 之外的一些未处理的异常。最具破坏性的来自托管 - 本机互操作。然而,这种“启用”技巧并不可靠。
    • @JacekBlaszczynski,如果要在混合模式下调试托管单元测试,我们需要启用“启用本机调试”。 UWP 在 VS IDE 中有自己的测试项目模板,但是你如何在项目中使用 coreclr 呢?如果要测试 Coreclr 项目,xunit 将是一个路径,但它不使用默认的 UWP 测试项目模板。或者如果同一个解决方案中有不同的项目,但他们必须使用不同的调试选项,创建不同的解决方案会是一个更好的解决方法。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 2020-01-23
    • 2016-12-23
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2021-08-01
    相关资源
    最近更新 更多