У меня есть переменная, которая очень редко получает неправильное значение. Поскольку система довольно сложна, у меня возникают проблемы с отслеживанием всех путей кода, через которые проходит значение - в нем задействовано несколько потоков, его можно сохранить, а затем загрузить из БД и т. Д. Я попытаюсь использовать генератор кодовых графиков, чтобы увидеть, смогу ли я определить проблему, посмотрев на способы вызова сеттера, возможно, есть какой-то другой метод. Может быть, обернуть значение классом, который отслеживает места и изменяет его? Я не уверен, что вопрос достаточно ясен, но я был бы признателен тем, кто столкнулся с такой ситуацией.
[Edit] Проблема не легко воспроизводима, и я не могу поймать ее в отладчике. Я ищу метод статического анализа или регистрации, чтобы помочь отследить проблему.
[Редактировать 2] Просто, чтобы прояснить ситуацию, значение, о котором я говорю, - это временная метка, представленная в виде количества миллисекунд от эпохи Unix (01.01.1970) в переменной длиной 64 бита. В некоторой неизвестной точке старшие 32 бита значения обрезаются, генерируя совершенно неправильные (и невосстановимые) временные метки.
[Правка 3] Хорошо, благодаря некоторым вашим предложениям и пару часов пролистывания кода я нашел виновника. Метка времени, основанная на миллисекундах, была преобразована в метку времени на основе секунды, разделив ее на 1000 и сохранив в переменной int
. На более позднем этапе кода метка времени, основанная на секундах (int
), была умножена на 1000 и сохранена в новую переменную long
. Поскольку как 1000, так и временные метки, основанные на секундах, имели значения int
, результат умножения был усечен перед преобразованием в long. Это было тонкое, спасибо всем, кто помог.