Неправильное представление Java с открытым исходным кодом при переходе в Eclipse с подключенным живым устройством

1

Я пытаюсь отладить эту проблему с Android-приложением, которая, кажется, происходит только на устройстве Samsung G5 v4.4.4. Чтобы попытаться проследить источник исключения NullPointerException, это поможет перейти через открытый код java, где сигнализируется NPE. Проблема в том, что когда мы используем эмулятор для Samsung G5 v4.4.4, приложение не бросает NPE , и мы можем перейти через открытый исходный код по строкам. Однако, когда мы подключаем устройство Samsung G5 к Eclipse и пытаемся выполнить код, когда он входит в java с открытым исходным кодом , отображается исходный код, но он явно неверен. Мы знаем это, например, потому что он, кажется, "перешагивает" строки комментариев в open source. Просмотрели многие статьи, связанные с исходным кодом, которые не найдены, но в нашем случае у нас действительно есть правильный исходный код, по крайней мере, в режиме эмуляции эмулятора.

Если кто-нибудь может дать руководство по этой конкретной проблеме отладки, возможно, это может помочь нам изолировать причину проблемы с нашими приложениями (только для Samsung G5). Все предложения приветствуются.

  • Платформа разработки Mac OSX 10.9.5.
  • Eclipse 23.0.2.1259578.
  • Android SDK Tools 24.0.2
  • Платформы для Android SDK Rev 21
  • Android SDK Built-tools Rev 21.1.2 (также был установлен Rev 20 и Rev 19.1)
  • Различные API Android, включая API 21, 20, 19m, 18, 17, 16, 14
  • Samsung G5 (Sprint) Версия программного обеспечения G900PVPU1ANK4, Аппаратная версия G900P.04. Android 4.4.4

UPDATE:

Чтобы немного продвинуться, я шагнул через Samsung (где исходный код в основном неправильный), а затем эмулятор (где исходный вид верен). Оба, предположительно, Android 4.4.4, но мы предполагаем, что Samsung изменил с AOSP. Сравнивая строки кода и некоторые переменные состояния, мы можем "наблюдать" за тем, что делает Samsung, хотя представление исходного кода неверно. Я бы не пожелал этой техники никому, но она помогла нам немного узнать о ошибке, наблюдаемой в нашем приложении на Samsung G5, и сообщила о этом вопросе SO.

Теги:
debugging

1 ответ

1

Предпочтительный подход в этом случае, вероятно, заключается в том, чтобы найти исходный файл java файла для конкретного поставщика и включить ссылку на него для Eclipse. Тем не менее, поставщики не делают это легко, и мы так и не смогли его найти.

С заботой и терпением, и немного удачи, можно проследить программу, если она имеет достаточно общности с другой программой. В нашем случае Samsung v4.4.4 можно сравнить с Eclipse v4.4.2 и коррелировать, чтобы определить до строки кода, вызывающей исключение. Сначала давайте базовое понимание области кода (в вашем приложении и через соответствующий открытый исходный код), который имеет отношение к проблеме. Затем вы начнете строить карту того, что должно произойти (без ошибок) по сравнению с тем, что "происходит" с устройством отказа. Это был основной процесс: 1. Получите блокнот для записи пошаговых результатов. У нас был столбец для "номера строки устройства", затем "номер строки эмулятора", затем имя модуля/метода, затем инструкция. 2. Установите точку останова на строке кода в программном обеспечении приложения, которое, как вы знаете, приведет к исключению. 3. Запустите эмулятор и выполните отладку до точки останова. 4. Используйте Step Into для записи каждой строки, указанной в трассировке стека. Обратите внимание на модуль/метод, когда он изменяется, и если строка кода кажется релевантной или интересной, запишите ее также. 5. Продолжайте записывать эту информацию в своем блокноте для каждой строки, пока вы не узнаете, что вы продвинулись в точке, где устройство будет генерировать исключение. 6. Остановите выполнение (возможно, перезапустите Eclipse), подключите устройство и выполните отладку до точки останова. 7. В некоторых случаях отображаемый источник, похоже, будет "исполнять" строки комментариев или будет переходить в середину метода, а не в его точку входа. Вы ищете подсказки, которые помогут вам определить, где устройство может работать в исходном коде. Одним из доказательств является то, что количество строк увеличивается с одного шага на другой. Очевидно, что если число строк увеличивается на единицу, то это однострочная инструкция. Если он прыгает на два или несколько, вероятно, что-то. И так далее. Другая ключевая часть информации - это отладочные переменные. Например, если строка кода в известном "хорошем" источнике a = 10;, то вы можете иногда просматривать переменную a до этой строки кода (она может быть нулевой, например), а затем после этой строки кода, Если вы правильно указали свое отображение источника, вы увидите, что значение a изменится на 10.

Это работает только для кода, который относительно одинаков. Например, мы увидели, что источник 4.4.4 Samsung будет в некоторых случаях отключен на 50 или даже на 100+ линиях, как если бы продавец вставил новый метод. Но мы смогли проследить его через источник, который мы могли бы видеть. Стоит ли это время или нет, трудно сказать. В итоге мы поняли, что нулевой указатель был чем-то, чего мы не могли победить, и мы выбрали совершенно другой подход для достижения цели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню