LINUX.ORG.RU

Задарили Android-планшет, закомпилил свою программу на Qt 5.2, запустил. А как дебажить?


0

1

Интро

На новый год задарили мне Андроид-планшет. Решил я попробовать скомпилировать свою программу в Qt 5.2 (ранее собирал под Qt 4.7 и 4.8).

Сие действие неожиданно легко получилось с минимальными исправлениями:

https://github.com/xintrea/mytetra_dev/commit/3c70dfd3af1f4de50c19e7848f7a5e4...

И что самое интересное, компиляция нормально прошла под ARM7, и даже сформировался файл *.apk с пакетом программы.

Офигев от такого поворота, я по свежей памяти записал всю последовательность действий, какие инструменты ставить для компиляции под Android в Qt 5.2, где, что и как настраивать:

http://webhamster.ru/mytetrashare/index/mtb0/1388591956bp3mf2jywh


Запуск

Залил программу на девайс, установил, запустил. Увидел первый экран приветствия. После нажатия OK программа должна была разворачивать свои файлы в пользовательской директории и показать свой основной экран.

Не знаю, развернулись файлы или нет, ибо далее лицезрею пустой черный экран.

Теперь мне нужно понять, что происходит с программой. Поэтому есть несколько вопросов.


Вопросы

1. Программа сыплет отладочными сообщениями в стандартный поток. Вопрос. Как запустить программу так, чтобы увидеть эти отладочные сообщения?


2. Через ADB я могу подконнектиться к планшету (в котором я пока не разобрался, как получить root, и нужен ли он для отладки). Я могу подключиться через ADB и к эмулятору, в котором есть root. В эмуляторе (рутованном) я могу запустить мою программу, и заглянуть в каталог

/data/data/org.qtproject.example.mytetra/files

но там (и в окрестностях) я не вижу рабочих файлов, которые должна была создать моя программа.

Вопрос. Можно ли как-то из ADB дать команду на запуск программы? Возможно тогда я увижу лог в ADB консоли. Не могу понять, какой бинарник нужно запускать и где он лежит.


3. Кто-нибудь знает, как запускать отладку Андроид-приложений из Qt Creator 3.0.0? У меня не получилось. Мне нужно точно знать последовательность действий.

★★★★★

1. Не подходит запускать ее прямо из креатора? Все сообщения оно мечет туда, а по-другому я не пробовал.

2. С папками вида /data/data/org.qtproject.example.mytetra/files у меня тоже не сложилось, может прав нет, я компилял демку из Qt3D. Оно вполне нормально работало, когда путь был из тех, куда из файлового менеджера пускают (типа /sdcard/Download/). Возможно, и правда дело в андроидовских permissions, чего-то в манифест дописывать придется.

anonymous
()

Первое что приходит в голову - в начале программы перенаправь весь вывод на консоль в файл на /sdcard. Его потом можно будет без всяких ADB прочитать.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Первое что приходит в голову - в начале программы перенаправь весь вывод на консоль в файл на /sdcard. Его потом можно будет без всяких ADB прочитать.

Ну это как-то очень костыльно. Хотелось бы именно вывод видеть в реальном времени.

Xintrea ★★★★★
() автор топика

Сие действие неожиданно легко получилось с минимальными исправлениями:

А зачем ты в сообщении коммита описываешь то, что и так видно в патче? Не лучше ли только описывать почему сделаны изменения?

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous

1. Не подходит запускать ее прямо из креатора? Все сообщения оно мечет туда, а по-другому я не пробовал.

Так, Debug - Start Debugging на рутованной виртуалке запустился, прога реально работает:

http://i.piccy.info/i9/4e0b25c6a96a8bf758d99d42ddcab114/1388835526/325469/597...

Проблема в том, что в Qt Creator 3.0.0 на закладке Application Output не видно ни одной строки из лога программы.


Ну и остается вопрос по файлам - где блин искать пользовательский каталог, который передает андроид в программу?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

А зачем ты в сообщении коммита описываешь то, что и так видно в патче? Не лучше ли только описывать почему сделаны изменения?

Потому что мне нужно описывать все существенные изменения, которые забросаны по коду. Как в GIT делать описание каждого точечного изменения в разных частях кода в пределах одного коммита - неясно. Поэтому и пишу

1-что сделано
2-где
3-для чего.

В патче же видна только информация по пунктам 1 и 2, а самого важного 3-го пункта нет.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

В патче же видна только информация по пунктам 1 и 2, а самого важного 3-го пункта нет.

Я не зря выделил слово «почему». Именно это я и говорил — 1 и 2 есть в патче, а 3 место в сообщении коммита.

i-rinat ★★★★★
()
Ответ на: комментарий от Xintrea

Хм, а у меня проги в Application Output гадили будь здоров. Да и gdb вроде бы просто работал. Ставил все с офф сайтов Qt, Android. Попробуй создать новый gui проект и там вывести что-то.

frozenix ★★★
()
Ответ на: комментарий от frozenix

Все-таки глючный этот эмулятор Андроида. Он работает только после полной перезагрузки компа первые 2-3 раза. Потом запуск той же самой программы без изменений начинает сегфолтиться. Потом вообще перестает запускаться эмулятор, показывает только черное окно.

Закрываю эмулятор, закрываю Qt Creator 3.0.0, запускаю снова креатор, и запускаю отладку - болт. Только после полной перезагрузки компа начинает запускаться эмулятор.

Такое впечатление, что попал в Windows 95. Я таких глюков давненько не наблюдал.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

А, я эмулятор не использовал, т.к. даже через vnc через wifi на устройстве будет быстрей работать и отзыв будет лучше.

frozenix ★★★
()
Ответ на: комментарий от stevejobs

Ну я поковырял немного и вот что выяснил.

Даже после закрытия и эмулятора, и Qt Creator, в системе продолжает висеть процесс:

adb -P 5037 fork-server server


Из-за него повторный запуск отладки невозможен.

Но и это еще не все. Даже если грохнуть этот процесс, эмулятор не будет запускаться. А все потому что в /tmp лежат «забытые» файлы и каким-то образом влияют на загрузку эмулятора.

$ pwd
/tmp/android-xi

xi:android-xi$ ls -l
итого 1127512
-rw------- 1 xi xi 576716800 янв  4 19:20 emulator-eBMhp9
-rw------- 1 xi xi 576716800 янв  4 19:32 emulator-Wo92s2
srwxr-xr-x 1 xi xi         0 янв  4 18:54 qemu-gles-5606
srwxr-xr-x 1 xi xi         0 янв  4 19:20 qemu-gles-6921
srwxr-xr-x 1 xi xi         0 янв  4 19:32 qemu-gles-7338



То есть, если убить и процесс, и удалить «забытые» файлы, то эмулятор начинает нормально запускаться.

Подводя итог запуска эмулятора, перед запуском отладки, если эмулятор еще не включен, следует выполнить команду:

killall adb ; rm -f -r -d /tmp/android-* ;


Вроде бы проблема решена.

Но вылезло еще три напасти.

1. Теперь моя программа в эмуляторе сегфолтится после первого экрана. Запустить ее я смог только один раз сегодня в обед. Самое интересное, что я ничего в программе не менял, ни строчки кода. Она сегфолтится даже после полной перезагрузки компа и запуска всего «на чистую» в первый раз.

Вообще не знаю что делать.


2. Похоже, что под Андроидом некорректно работает установка обработчика отладочного вывода. После команды:

qInstallMessageHandler(myMessageOutput);


строка, которую при обычных условиях выдает в консоль qDebug():

qDebug() << "Это отладочное сообщение";


не попадает в функцию myMessageOutput(), а улетает черт знает куда.

Поэтому не могу перенаправить отладочные сообщения в файл.


3. Так и не смог заставить работать отладку в QtCreator. На брекпоинтах программа не останавливается. Зато QtCreator показывает дизассемблер в момент сегфолта. Толку от него мало, потому что не видно даже стека вызовов. Вместо имен функций по два вопроса "??".


Кароч, все глухо.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 4)
Ответ на: комментарий от Xintrea

ты щаз вообще о чем, о реальном девайсе или об эмуляторе? В эмуляторе сотри память прежде всего (или удали+создай новый эмулятор). Андроид должен быть не меньше 2.3. На десктопе должен быть глобально доступный питон версии не меньше 2.6. Пруф того, что дебаг вообще работает: http://www.youtube.com/watch?v=NsGJzJnIOR0

stevejobs ★★★★☆
()
Ответ на: комментарий от Xintrea

CONFIG += console в pro-файле и перебилдить всё, или у тебя cmake? Tools -> Options -> Build & Run -> [X] Merge stderr and stdout?

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.