Visual Studio调试问题与Resharper/Nunit相关

9
我在Visual Studio中遇到了一个非常令人沮丧的问题。我正在使用Resharper编写Nunit测试。
如果我设置断点,它确实会被触发,但是单步跟踪/跳过和继续不起作用,测试也永远不会结束。即使我设置了两个断点,继续也无法触发第二个断点。如果我没有设置断点调试测试,测试就能正常完成。
此外,经常出现间歇性的情况,当我尝试通过设置断点来调试测试时,我不能评估变量的内容,而是看到以下消息:Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation.
我正在使用Visual Studio 2010。
如果您有任何想法,请告诉我需要查看什么... 我已经在网上搜索了很多,但没有找到解决办法。
如需进一步信息,请随时联系我。
编辑 - 方法示例:
测试:
[Test]
public void OneRowAddedToSourceData() {
    //Factory just returns System.Data.DataTable with correct columns.
    var sourceData = new DataTableContainerFactory().GetTargetTableContainer(DataTypeNames.EventSharedEnd);

    //GetRow just returns a populated row.
    var row = GetRow(sourceData, 123456, 123,60, 31);

    sourceData.DataTable.Rows.Add(row);
    Assert.AreEqual(1, sourceData.DataTable.Rows.Count);
}

当我在Assert语句上设置断点并尝试评估数据表时,出现了这个问题。

更新2! 因此,我已将此问题缩小到Resharper调试。我将一个测试类更改为MSTest而不是NUnit,但仍然在使用Resharper进行调试时遇到了以上两个问题。然而,当我使用内置的VS MSTest测试运行器来运行测试时,所有问题都已解决!

现在我更喜欢使用NUnit和Resharper,所以如果有人能指出一个设置,让Resharper可以正确地调试,我会非常高兴!


我已经看到了你所说的情况。这与Resharper/Nunit无关。它发生在你尝试计算这些变量时。当我尝试展开一个List<>或类似的东西(Dictionary<,>),我也会遇到这个问题。如果你可以避免引起这个消息的计算,你就可以继续调试。目前,我只知道当我收到这个错误消息时,我会停止调试并重新启动,然后尝试不评估导致问题的变量。真希望知道如何防止这种情况发生。 - Joel Rondeau
谢谢Joel,这是一种解决某些情况的方法,但是我经常尝试精确评估这些变量。非常令人沮丧!我只希望这里有人能帮忙! - Paul Grimshaw
你正在评估的函数是否可能在不断循环?你能提供一个简单的例子来说明你看到了哪些类型的测试吗? - William Dwyer
我认为评估是不起作用的,因为它是间歇性的。我已经添加了一个导致问题的示例。 - Paul Grimshaw
2个回答

5
我有一个可能的解决方案,但有一个警告。我搜索了一下,发现了这篇博客文章。它建议从工具->选项->调试->常规关闭启用属性评估和其他隐式函数调用。我将其关闭后,我现在可以进入以前导致此问题的项目。
但是,你习惯于自动显示的所有属性现在都不会被显示。相反,它表明用户关闭了隐式函数评估。您只需要点击属性上的刷新按钮即可查看值,但我还没有决定是否愿意做出这个折衷。

尝试了这个方法,但是很遗憾当我点击刷新按钮后,仍然会出现错误。 - Paul Grimshaw
我猜测我的简单列表测试是原因。刷新时要评估的内容少得多。快速问题:您是否编译为 .Net 4.0?我在 .Net 4.0 中没有复制我的问题(主要在 .Net 3.5 中工作)。怀疑这与此有关(至少在我的端上)。 - Joel Rondeau
我在单一类型的对象上遇到了这个问题。它是一个NHybernate实体。其他实体没有出现这个问题。 - Jordan

0

我找到了解决这个问题的方法!

请检查选项DEBUG->OPTIONS AND SETTINGS->GENERAL->ENABLE PROPERTY EVALUATION AND OTHER IMPLICIT FUNCTION CALLS,并取消选中在变量窗口中调用字符串转换函数的对象

这对我起作用了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接