为什么Eclipse在我跳过时会踩到?

时间:2018-05-15 02:14:03

标签: java eclipse debugging

我正在使用Eclipse Oxygen中的调试模式来调试我的代码。

我正在编写一个回溯算法(一个递归函数 - 它自己调用)。

在Backtrack函数中有一个for循环,在for循环结束时,如果满足某些条件,则运行以下代码:Backtrack(csp, index + 1, CopyCSP(currentSolution));

我正在调试我的代码,我想进入for循环的下一次迭代,所以当我到达这一行时,我点击“跳过”。但它会介入,并引导我完成下一个Backtrack功能。

我知道它实际上是下一个函数,因为正如你所看到的,index变量上升了一个,发生了。

为什么会这样?我怎样才能避免这种情况并实际上跨过?如果跳过不能做我想要的,我应该使用什么?

这是我的完整功能代码:

private void Backtrack(CSP csp, int index, CSP currentSolution) {
//BREAKPOINT IS HERE
    if(index == csp.numVars) {
        currentSolution.PrintSolution();
        csp.PrintSolution(currentSolution);
        solved = true;
        return;
    }
    for(int test = 0; test < csp.MaxDomainSize(); test++) {
        if(solved) {
            return;
        }
        if(test < currentSolution.vars[index].domain.size) {
            currentSolution.vars[index].value = currentSolution.vars[index].domain.get(test);
        }
        else {
            continue;
        }
        boolean satisfied = true;
        for(int i = 0; i < csp.constraints.size; i++) {
            if(!csp.constraints.get(i).Satisfied(currentSolution.vars, index)) {
                satisfied = false;
            }
        }
        if(satisfied) {
            System.out.println("Variable " + index + " satisfied by " + currentSolution.vars[index].value + ".");
            Backtrack(csp, index + 1, CopyCSP(currentSolution));
        }
    }
}

我在断点所在地发表了评论。

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题并找到了类似的解决方案,请在此处发布以供参考。

问题:

  • 针对每个“ Step Over(F6)”操作的调试会话“ Stepped Into”进入每一行

解决方案:

  1. '运行->删除所有断点'
  2. '运行->重新启动'

结果:

  • 'Step Over(F6)'现在按预期方式越过了活动的调试行。

如果遇到问题,请提供清晰明了的共享方式,希望对您有所帮助。

答案 1 :(得分:-1)

按照思路说明它是断点......

在大多数情况下,断点会停止控制流。

Eclipse具有禁用单个断点并禁用所有断点的选项。您的情况可能适合条件断点:

  1. 右键单击断点并选择断点属性。这将打开一个带有&#34;点击计数的对话框&#34;和&#34;有条件的&#34;它大部分时间都有效,而且在没有这种情况时会令人困惑。
  2. 如果选中&#34; conditional&#34;,这将启用一个文本框,您可以在其中编写条件以使用变量来生成真实的语句。所以你可以输入&#34; index == 1000&#34;然后当你进行1000次深呼叫时它会停止。
  3. 我没有使用&#34;点击计数&#34;自己。