2012-03-15 2 views
1

Я использую время, прошедшее как переменная в программе, которую я в настоящее время отлаживаю. Поскольку я отлаживаю это, прошедшая переменная по-прежнему увеличивается, пока я рассматриваю переменные, дающие нежелательные результаты, и делает отладки неэффективной. Есть ли способ заморозить время или остановить переменную? (Я использую System.currentTimeMillis() для расчета времени).Время от времени увеличивается в отладке?

Редактировать: У меня есть объект в пространстве, который перемещается с увеличением времени, потому что я использую System.currentTimeMillis(), чтобы рассчитать, сколько времени прошло, оно не работает при отладке. Я хотел бы знать, есть ли способ, которым я могу обойти это, спасибо.

+2

Ваш вопрос не очень ясен. Вставьте несколько скриншотов или фрагментов кода, чтобы все было ясно. – Drona

+0

вычислить прошедшее время и сохранить его в другой переменной ?? вы не захотите (и я не думаю, что вы можете) остановить System.currentTimeMillis(). –

ответ

2

Один общий подход к этой проблеме заключается в использовании инъекции зависимостей. Создайте класс Clock (например), который инициализируется (вводится) источником времени. В производственном коде этот источник вполне может быть System.nanotime() или System.currentTimeMillis(). При отладке вы используете управляемые часы. В реализации отладки класса Clock есть дополнительные методы (например, suspend(), resume(), setClockTo()), которые позволяют использовать имитируемое время.

2

System.currentTimeMillis() выполняет то, что он должен делать: дает вам время в момент выполнения инструкции. Когда вы «изучаете переменные», ваша программная нить приостанавливается, но время все еще продолжается ... Таким образом, увеличение времени

+0

Да, я знаю об этом, но я хочу знать, как его обойти. – John

+0

Правильно ли ваша программа зависит от прошедшего времени работы? если да, возможно, что-то не так (объясните, как в вашем вопросе). Если нет, то зачем беспокоиться – UmNyobe

+0

Да, это так. – John

0

Ваша альтернатива не использовать в System.currentTimeMillis(). Это довольно сложно, потому что, когда вы отлаживаете, вы хотите, чтобы время на шаг вперед, когда код работает.

Лучшим решением является изменение этого требования, так что это не проблема.

например. скажем, у вас короткий тайм-аут, вы можете увеличить время ожидания при работе в отладчике.