#android-studio #kotlin #debugging #observable
#android-studio #kotlin #отладка #наблюдаемый
Вопрос:
Все еще новичок в kotlin. Поскольку большая часть моего опыта отладки теперь бесполезна, я пытаюсь выяснить методы отладки некоторых радикально новых функций этого языка (с использованием Android studio). Итак, я ищу подсказки, подсказки, стратегии и т. Д.
особенности
Я ищу, когда установлена конкретная переменная: error.code
(см. Точку останова 2). Это должно было быть 401, но по какой-то причине оно было изменено на 13! Пытаюсь отследить ее.
Единственное место, где я могу найти, где это значение изменяется в наблюдателе. Когда я устанавливаю отладчик на остановку в точке останова 1, я вижу, что it.code
это уже неправильное значение. Но когда я смотрю на все варианты использования error.code, все они являются экземплярами ЧТЕНИЯ — без записи! И единственный вызов handleError()
находится в коде наблюдателя (точка останова 1).
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.onProvisionError.observe(viewLifecycleOwner, EventObserver {
handleError(viewModel.lastContext, it). // breakpoint 1
})
и позже
private fun handleError(pc: ProvisionContext, error: ProvisioningError) {
viewModel.errorCode = error.code // breakpoint 2 <--first noticed error here
viewModel.errorString = error.errorString
error.extraDetails?.let {
viewModel.errorDetails = it
}
Стек вызовов при достижении точки останова 1 не помогает. Вызывающий объект — это просто библиотека : EventObserver.onChanged()
. И в этом суть: я не знаю, что вызывает наблюдателя с неверными данными. Любые подсказки будут высоко оценены.
Комментарии:
1. LiveData передает свое значение наблюдателям без изменений, когда значение установлено. Значение не изменяется, если только это не настроенный подкласс LiveData. В этом случае
code
свойство, очевидно, видоизменяется. Если она не изменяется при выполнении поиска по использованию, следующее, что я бы проверил, это возможно ли, что LiveData был назначен совершенно другой экземпляр класса (независимо от того, какой класс имеетcode
свойство).2. Да, я понимаю. И похоже, что происходит что-то, что меня смущает. Генерируются исключения и создаются новые экземпляры — каждый из них может изменять значения, не отображаясь как очевидная запись переменной. Хммм, все еще нужно немного покопаться в коде.