相关疑难解决方法(0)

Visual Studio:让调试器意识到函数不会导致"副作用"

我有一个对象,我必须通过观察窗口观看很多次的功能输出.问题是每次我都要按下刷新按钮,因为"这个表达会导致副作用,不会被评估".有没有办法用[DoesNotCauseSideEffects]之类的东西标记一个函数,这样每次我做一个步骤时手表都会自动评估它?

我在VS2008或2010中编写C#.

编辑: 该功能看起来像这样,并且正如您所看到的那样,不会产生任何副作用.(x,y,z都是双打)

public override string ToString()
{
    return "{ " + x.ToString(".00") + ", " + y.ToString(".00") + ", " + z.ToString(".00") + "}";
}
Run Code Online (Sandbox Code Playgroud)

c# debugging visual-studio

16
推荐指数
2
解决办法
4180
查看次数

在Visual Studio中的监视窗口中自动刷新

可能重复:
"此表达式会导致副作用,不会被评估".怎么压制?

我在Visual Studio中使用Watch窗口.我在Watch窗口中添加了一些变量.有时为了在调试时获取值,我必须单击刷新图标.是不是有一些设置允许它自动刷新?

.net debugging visual-studio watch-window

13
推荐指数
1
解决办法
4406
查看次数

有没有办法"这个表达有副作用,不会被评估."?

在Visual Studio 2017中,我创建了一个调用C++函数的.natvis调试器可视化规则.

在调试器中它显示:

This expression has side effects and will not be evaluated.

除此之外,它还显示了一个蓝色箭头,可以点击它以强制它进行评估,然后它实际上会调用该函数.(我认为这可能是最近的功能,因为我似乎记得在VS2013中尝试这个并且不记得它有旁路)

我的问题是:有什么方法可以永久地绕过这个安全检查,这样它总能立即评估我的功能而不需要我点击箭头?

我看了一个非常相似的问题: "这个表达会导致副作用,不会被评估".怎么压制?接受的答案仅对C#有效(在C#表达式的末尾添加ac,强制调试器自动重新评估它)

我想如果存在这样的事情,它将是以下机制之一:

  1. 注册表设置或其他全局设置,始终禁用安全检查.
  2. 一种注释代码或.natvis规则的方法,以便编译器知道它是一种安全且纯粹的无副作用的函数

要提供有关应用程序的更多详细信息:我们在代码中使用uint32,它们是从字符串中散列出来的,并且我们有一个仅在开发版本中加载的字符串数据库.解码函数在二叉搜索树中查找u32 ID,返回在存储节点中找到的字符串.所以我知道它完全没有副作用且足够快,每次.natvis规则都这样说时,它不会影响调试体验.

c++ visual-studio natvis visual-studio-2017

5
推荐指数
1
解决办法
1175
查看次数

我可以在我不拥有的类型上使用 DebuggerTypeProxyAttribute 之类的东西吗?

我有一个IClaimsPrincipal变量,我想看看其中有多少个声明。在监视窗口中导航属性很复杂,因此我想自定义该对象的显示方式。

我知道这个[DebuggerTypeProxy]attribute,它最初看起来可能会做我想要的事情。不幸的是,它需要附加到课程中,而我并不“拥有”该课程。在本例中,它是一个Microsoft.IdentityModel.Claims.ClaimsPrincipal.

我想显示 的值IClaimsPrincipal.Identities[0].Claims.Count

有没有任何方法(使用[DebuggerTypeProxy]或类似的方法)来自定义我不拥有的类型的值在监视窗口中的显示方式?

visual-studio-debugging visual-studio-2012

4
推荐指数
1
解决办法
535
查看次数