2015-10-20 3 views
0

Я бы очень хотел предоставить минимальный рабочий пример для этого вопроса, но мне не удалось его создать. Поэтому я просто опишу, что происходит, и надеюсь, что кто-то может помочь.Невозможно установить переменную-член в нуль

Где-то в моем коде, у меня есть следующие строки: (. Этот код является результатом большого количества отладки я уже сделано, чтобы найти причину моей проблемы)

long i = 0; 
while (this.someField != null) { 
    this.someField = null; 
    i++; 
} 
long j = i; 

Этот код развертывается на сервере приложений WebLogic. У меня есть точка останова, установленная перед циклом while. Я отлаживаю код удаленно с помощью IntelliJ.

Когда код попадает в точку останова, я выполняю его шаг за шагом. Код просто продолжает цикл через цикл while, но someField никогда не становится null. Поэтому я установил вторую точку останова на линии после цикла и ударил continue. Код немедленно выходит из цикла и останавливается в этой строке. Я могу сказать, что больше нет циклов цикла, потому что после этого я проверяю i. Однако this.someFieldеще не является нулевым. Я пробовал это несколько раз, поэтому я совершенно уверен, что причина, по которой код продолжает выполнять цикл, заключается в том, что я отлаживаю его.

Я понятия не имею, как отладить эту проблему. Мои наблюдения просто не имеют никакого смысла (если я не применяю квантовую механику). Что может вызвать такое поведение? Это ошибка в моей JVM? Ошибка в отладчике? Что-то другое?

Edit:

Поле объявлен как это:

private Vector<KeyValuePair> someField = null; 

Это частная, и я заверил, что это не изменяется другим потоком путем установки точек останова на все методы, которые MANGLE с ним.

+1

Любой случайный параллелизм является частью тайны? Можете ли вы показать определение 'someField'? – Thomas

+0

На сервере приложений существуют другие потоки, но все они работают в разных вариантах развертывания и не могут помешать этому объекту. – flyx

+0

Думаю, вам нужно попытаться создать минимальный пример. На данный момент ваш вопрос невозможно ответить, и непонятно, зачем вам нужен цикл while, чтобы задать поле «null». –

ответ

0

Это, кажется, проблема с отладчиком IntelliJ. Отладчик устанавливает значение во время отладки, а поток управления изменяется в соответствии с этой модификацией. Когда я использовал отладчик Eclipse, проблема исчезла.

Смежные вопросы