Отладчик выглядит странно. Мы имеем NetBeans что-то вроде
package ch.racic.android.marketenabler; class ExecReceiver {/*
а тут у нас инструкции Dalvik в формате ассемблера Smali
*/
Т.е. класс ExecReceiver фактически пустой с точки зрения языка Java, все инструкции Dalvik — внутри одного большого комментария. Но тем не менее NetBeans может выполнять эти инструкции внутри комментария одна за другой. Одна инструкция Dalvik за один шаг отладки. И после каждого шага можно просмотреть значение полей, локальных регистров и т.п.
Поначалу это смотрится немного странно, потом как-то привыкаешь.
Увы, пока что простого способа не нашел. Насколько я знаю, нельзя вот так просто взять и скомандовать по JDWP приложению: «А ну стой! Какую инструкцию виртуальной машины Dalvik сейчас выполняешь? Какие значения переменных? Сколько солдат в твоем отряде потоков в приложении?»
Поэтому приходится извращаться. Пересборка с опцией -d нужна
(1) для того что бы добавить отладочную информацию в пакет, соответствие «инструкция Smali — строка в исходном коде», ну и получить сам исходный код
(2) а также выставить android:debuggable=«true».
Без (1) и (2) этого отладка к сожалению «не заводится».
Этот способ интересен в основном для reverse engineers — например для вирусных аналитиков или хакеров. Иногда этот способ полезен в ситуации «есть приложение, а исходники и документацию потеряли, разрабы уволились — теперь надо хотя бы примерно понять как оно там внутри работает». Хотя такое редко бывает конечно.
Т.е. класс ExecReceiver фактически пустой с точки зрения языка Java, все инструкции Dalvik — внутри одного большого комментария. Но тем не менее NetBeans может выполнять эти инструкции внутри комментария одна за другой. Одна инструкция Dalvik за один шаг отладки. И после каждого шага можно просмотреть значение полей, локальных регистров и т.п.
Поначалу это смотрится немного странно, потом как-то привыкаешь.
Увы, пока что простого способа не нашел. Насколько я знаю, нельзя вот так просто взять и скомандовать по JDWP приложению: «А ну стой! Какую инструкцию виртуальной машины Dalvik сейчас выполняешь? Какие значения переменных? Сколько
солдат в твоем отрядепотоков в приложении?»Поэтому приходится извращаться. Пересборка с опцией -d нужна
(1) для того что бы добавить отладочную информацию в пакет, соответствие «инструкция Smali — строка в исходном коде», ну и получить сам исходный код
(2) а также выставить android:debuggable=«true».
Без (1) и (2) этого отладка к сожалению «не заводится».
Этот способ интересен в основном для reverse engineers — например для вирусных аналитиков или хакеров. Иногда этот способ полезен в ситуации «есть приложение, а исходники и документацию потеряли, разрабы уволились — теперь надо хотя бы примерно понять как оно там внутри работает». Хотя такое редко бывает конечно.