环境:Visual Studio 2015 RTM.(我没有尝试旧版本.)
最近,我一直在调试我的一些Noda Time代码,我注意到当我有一个类型的局部变量NodaTime.Instant(structNoda Time中的一个中心类型)时,"Locals"和"Watch"窗口似乎没有调用它的ToString()覆盖.如果我ToString()在监视窗口中明确调用,我会看到相应的表示,但我只是看到:
variableName {NodaTime.Instant}
Run Code Online (Sandbox Code Playgroud)
这不是很有用.
如果我更改覆盖以返回一个常量字符串,那么该字符串将显示在调试器中,因此它显然能够接收它 - 它只是不想在"正常"状态下使用它.
我决定在一个小的演示应用程序中本地重现这个,这就是我想出的.(请注意,在这篇文章的早期版本中,DemoStruct是一个类,DemoClass根本不存在 - 我的错,但它解释了一些看起来很奇怪的评论......)
using System;
using System.Diagnostics;
using System.Threading;
public struct DemoStruct
{
public string Name { get; }
public DemoStruct(string name)
{
Name = name;
}
public override string ToString()
{
Thread.Sleep(1000); // Vary this to see different results
return $"Struct: {Name}";
}
}
public class DemoClass
{
public string …Run Code Online (Sandbox Code Playgroud) 最近我开始研究VS2012.
当我调试我的代码(这是一个SharePoint 2013应用程序)并试图获取变量的值时 - 我一次又一次地得到消息:
Function evaluation disabled because a previous function evaluation timed out.
You must continue execution to reenable function evaluation.
Run Code Online (Sandbox Code Playgroud)
我之前曾在visual studio 2010(适用于SharePoint 2010应用程序)工作过,并且在尝试获取Quick Watch中的变量值时几乎从未收到此消息.
我用Google搜索了错误消息,我发现当尝试获取其动作需要很长时间的函数值时会出现问题,但我并不是想获取函数的值,只是变量,但是我得到了这个错误.
我并不总是在相同的变量上得到错误,而是随机 - 每次都有不同的变量.
是否还有其他人在VS2012中遇到此问题?
我怎么能摆脱它呢?
在调试和单步执行代码时,我尝试向监视窗口添加一个方法,该方法需要很长时间来评估(可能需要 20-30 秒,因为它涉及网络连接)。然而,大约 15 秒后,我收到“评估超时”错误。
我发现了以下解决方案,它包括改变注册表值NormalEvalTimeout下HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\Debugger延长超时长度:
但是,我的注册表中似乎没有该条目(或任何其他与超时相关的条目)。我还查看了 WOW64 regedit。我试图NormalEvalTimeout从头开始创建条目,但没有效果。
任何想法在哪里可以找到注册表项,或者是否有另一种方法可以使用 VS 2015 执行此操作?谢谢您的帮助。