Почему «Затмение» вступает, когда я нажимаю «перешагнуть»? - PullRequest
0 голосов
/ 15 мая 2018

Я использую режим отладки в 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 голосов
/ 20 декабря 2018

У меня была похожая проблема, и я нашел похожее решение, разместив здесь для справки.

Проблема:

  • Отладка сеанса 'Stepped Into' в каждой строке для каждой операции 'Step Over (F6)'

Решение:

  1. ' Выполнить-> Удалить все точки останова '
  2. Подвижная> Restart

Результат:

  • 'Step Over (F6)' теперь переходит активную строку отладки, как и ожидалось.

Обмен ясностью и простотой, если он встречается, надеюсь, это поможет.

0 голосов
/ 15 мая 2018

Следуя ходу мыслей, что это точка останова ...

Точка останова останавливает поток управления в большинстве ситуаций.

Eclipse имеет опции для отключения отдельных точек останова и отключения всех точек останова. Ваша ситуация может быть подходящей для условных контрольных точек:

  1. Щелкните правой кнопкой мыши точку останова и выберите свойства точки останова. Это вызовет диалог с «счетчиком обращений» и «условным», который работает большую часть времени и сбивает с толку, когда это не так.
  2. Если вы отметите «условно», это включит текстовое поле, в котором вы можете написать условие, чтобы использовать переменные для создания истинного утверждения. Таким образом, вы можете ввести «index == 1000», и тогда он остановится, когда вы наберете 1000 вызовов.

Я сам не использовал «счетчик обращений».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...