【问题标题】:How watch values doesn't affect the environment手表值如何不影响环境
【发布时间】:2015-10-07 02:58:41
【问题描述】:

在IDE中调试时,IDE如何知道如何在不改变环境(写入文件,将结果写入DB)的情况下计算watch值?

【问题讨论】:

  • 哪个 IDE?哪种编程语言?图片不显示评估结果。
  • 我尽量让它成为一个一般性问题。 (在这种情况下是 intellij 和 java)。

标签: debugging ide watch


【解决方案1】:

您的观察不能一概而论。 IDE 通常会在调试期间进行更改,尤其是在属性具有副作用的情况下。

视觉工作室

以下 C# 代码:

using System;

namespace EvaluateChangesValue
{
    class Program
    {
        static void Main()
        {
            var program = new Program();
            Console.WriteLine(program.Value);
            Console.ReadLine();
            Console.WriteLine(program.Value);
            Console.ReadLine();
        }

        private int member;

        private int Value => member++;
    }
}

在第一个ReadLine() 处设置断点,然后将program.Value 添加到监视窗口,看看值如何因member++ 语句而增加。

日食

在 Java 和 Eclipse 中,做出相同的证明有点困难,原因如下:

  1. 在 Java 中,调用方法还是访问字段更加明确。
  2. 您需要“表达式”窗口,默认情况下不可用
  3. 重新评估需要用户交互

代码类似于C#:

public class Program {

    public static void main(String[] args)
    {
        Program p = new Program();
        System.out.println(p.member);
        System.console().readLine();
        System.out.println(p.member);
        System.console().readLine();
    }

    private int member;

    public int getMember()
    {
        return member++;
    }
}

还有截图:

【讨论】:

  • 这可能也发生在 Java 和其他 IDE 上。
  • 这是不是意味着每次我做next的时候,手表都会重新计算,program.Value会增加?
  • 也就是说,调试可能会产生与常规运行不同的结果
  • @omer727:是的,调试应用程序可能会导致不同的结果。通常是由于超时,但在这种情况下也是由于值。我现在已经安装了 Eclipse,我会尝试在那里重复这个例子。
  • 感谢您的巨额投资。但是如果你继续使用java,试试idea intellij会好很多
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 2018-08-13
  • 2012-11-04
相关资源
最近更新 更多