Есть ли какой-нибудь способ в отладчике затмения определить, какой конкретный указатель он рассматривает как нулевой, если его не должно быть?
Ответ здесь - да и нет. Нет: Вы не можете указать Eclipse указать, на какой указатель проверять наличие нуля.Все, что вы можете сделать, это наблюдать за самими указателями, когда вы сломаны в классе или функции. Да: Все, что вам нужно сделать, это разделить ваши звонки, и вы сможете найти объект.Например, рассматриваемый код кажется следующим:
_currentGraphic.getCoordinates().setX((int) event.getX() - _currentGraphic.getGraphic().getWidth() / 2);
Вы бы разбили это на (простите за псевдо, но я не знаю, с какими типами вы работаете):
Type _coords = _currentGraphic.getCoordinates();
Type _graphic = _currentGraphic.getGraphic();
Type _width = _graphic.getWidth();
_coords.setX((int) event.getX() - _width / 2);
Теперь строка кода разбита на один объект на строку, что позволяет легко определить, кто является нарушителем.
Почему точки останова игнорируются?
Это немного сложнее.Ваши точки останова могут или не могут быть проигнорированы.В общем, если вы добираетесь до одной точки останова, она должна подходить ко всем по порядку.Тем не менее, я заметил в Eclipse, что иногда точки останова игнорируются при определенных обстоятельствах.По некоторым причинам adb не полностью интегрирован с отладчиком Eclipse.Это означает, что если вы измените точки останова в середине запущенной отладки, он может распознавать или не распознавать их.Часто бывает достаточно полностью убить приложение и выполнить повторную отладку.
Кроме того, иногда adb и отладчик не синхронизируются правильно.Есть команда, которую вы можете использовать (лучше всего в начале вашего кода), которая очень хорошо помогает в этом.Если вы вставите команду Debug.waitForDebugger()
, произойдет синхронизация, позволяющая корректно работать самым ранним точкам останова (тем, которые были в вашем первом onCreate () и аналогичных).Команда действительно делает вашу отладку намного медленнее.Использование этого в ключевых точках также уменьшит явное игнорирование точки останова, обсуждавшееся ранее.
Теперь важно отметить, что только то, что вы думаете, что игнорирует их, не означает, что это так.Иногда (особенно с Android, прямо сейчас) выполнение не обязательно идет по пути, который разработчик считает, что делает.Например, можно установить точку останова в конструкторе ViewClass(Context context)
, когда она фактически создается с помощью XML с конструктором ViewClass(Context context, AttributeSet attr)
.Черт, даже забытое создание объекта может полностью управлять выполнением в неправильном направлении.Это может быть особенно верно, если объект имеет static
членов или код, который выполняется при инициализации class (не object initialization).Не глядя на ваш код, я не могу сказать, что происходит, но, надеюсь, это даст вам инструменты, чтобы найти ваш ответ.
Надеюсь, это поможет,
FuzzicalLogic