Отладка кода в Eclipse. Корпус внутреннего цикла - PullRequest
0 голосов
/ 22 января 2012

При отладке кода в Eclipse я столкнулся со следующей проблемой.Существует цикл WHILE с ~ 10000 итераций.Поэтому не рекомендуется использовать Step здесь.Итак, я установил точку останова сразу после этого цикла WHILE.Но похоже, что этот WHILE Loop попал во внутренний цикл.Я не знаю, как найти правильную итерацию, которая вызвала эту проблему.Есть ли способ отличить длительное время выполнения кода от внутреннего цикла?Что я должен сделать, чтобы быстро найти такие тупиковые места в коде?

PS Код отлично работал с небольшими наборами данных ...

Ответы [ 2 ]

3 голосов
/ 22 января 2012

Если вы ищете тупик, вы можете запустить программу в режиме отладки без точки останова и подождать, пока она не заблокируется, а затем остановить ее.

Если вы хотите, чтобы она остановилась на определенной итерации, выМожно добавить условную точку останова, но это может замедлить выполнение.

Что я делаю, так это добавляю условие в код, что-то вроде

if (i == 10000 && condition)
    Thread.yield(); // add break point here.

или если у вас есть метод, который возвращаетплохое значение вы можете сделать что-то вроде

boolean ok = method();
if (!ok)
   method(); // add a break point here so you can see why it fails.
2 голосов
/ 22 января 2012

Переписывание кода для тестирования Разве это не более вероятно, что это экспоненциально замедляется, как поиск в растущем LinkedList, распределениях, транзакциях.

if (i > 8000) {
    show loop duration; // breakpoint here
} else if (i > 6000) {
    show loop duration; // breakpoint here
} else if (i > 4000) {
    show loop duration; // breakpoint here
}

Поэтому я бы ввел StopWatch , если петли становятся медленнее. Использование findBugs для проверки утечки на ручке. И, наконец, переписать в меньшие методы помогает для унаследованного кода.

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