Название: [Решено] Есть Android-планшет, закомпилил Qt 5.2 прогу, запустил. Как дебажить? Отправлено: xintrea от Январь 04, 2014, 13:34 Интро
На новый год задарили мне Андроид-планшет. Решил я попробовать скомпилировать свою программу в Qt 5.2 (ранее собирал под Qt 4.7 и 4.8 ). Сие действие неожиданно легко получилось с минимальными исправлениями: https://github.com/xintrea/mytetra_dev/commit/3c70dfd3af1f4de50c19e7848f7a5e4872a02c19 И что самое интересное, компиляция нормально прошла под ARM7, и даже сформировался файл *.apk с пакетом программы. Офигев от такого поворота, я по свежей памяти записал всю последовательность действий, какие инструменты ставить для компиляции под Android в Qt 5.2, где, что и как настраивать: http://webhamster.ru/mytetrashare/index/mtb0/1389188506pjpk70s9qf Запуск Залил программу на девайс, установил, запустил. Увидел первый экран приветствия. После нажатия OK программа должна была разворачивать свои файлы в пользовательской директории и показать свой основной экран. Не знаю, развернулись файлы или нет, ибо далее лицезрею пустой черный экран. Теперь мне нужно понять, что происходит с программой. Поэтому есть несколько вопросов. Вопросы 1. Программа сыплет отладочными сообщениями в стандартный поток. Вопрос. Как запустить программу так, чтобы увидеть эти отладочные сообщения? 2. Через ADB я могу подконнектиться к планшету (в котором я пока не разобрался, как получить root, и нужен ли он для отладки). Я могу подключиться через ADB и к эмулятору, в котором есть root. В эмуляторе (рутованном) я могу запустить мою программу, и заглянуть в каталог /data/data/org.qtproject.example.mytetra/files но там (и в окрестностях) я не вижу рабочих файлов, которые должна была создать моя программа. Вопрос. Можно ли как-то из ADB дать команду на запуск программы? Возможно тогда я увижу лог в ADB консоли. Не могу понять, какой бинарник нужно запускать и где он лежит. 3. Кто-нибудь знает, как запускать отладку Андроид-приложений из Qt Creator 3.0.0? У меня не получилось. Мне нужно точно знать последовательность действий. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 04, 2014, 14:19 Я просто устанавливаю точки останова и нажимаю начать отладку. Программа запускается на андроиде и я могу выполнять ее пошагово.
Кстати, все отладочные сообщения передаются и выводятся в окне QtCreator. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 04, 2014, 16:00 Я просто устанавливаю точки останова и нажимаю начать отладку. Программа запускается на андроиде и я могу выполнять ее пошагово. Кстати, все отладочные сообщения передаются и выводятся в окне QtCreator. Блин, а у меня не останавливается отладка на брекпоинтах. Даже не знаю что делать. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 04, 2014, 22:01 Кстати, все отладочные сообщения передаются и выводятся в окне QtCreator. Два вопроса, мне очень важно знать оба ответа: 1. У тебя видны в QtCreator сообщения через qDebug()? 2. У тебя видны в QtCreator сообщения через printf()? Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 04, 2014, 23:39 1. У тебя видны в QtCreator сообщения через qDebug()? Да.2. У тебя видны в QtCreator сообщения через printf()? Нет.Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 05, 2014, 00:34 1. У тебя видны в QtCreator сообщения через qDebug()? Да.2. У тебя видны в QtCreator сообщения через printf()? Нет.Ага, спасибо. Выходит, что под Андроидом нельзя подменить обработчик qDebug() через код: Код: #if QT_VERSION < 0x050000 потому что 1. Если в обработчике выводить в консоль через printf() или через fprintf(stderr, "[DBG] %s\n", msg); то этот вывод не получит отладчик QtCreator. 2. Если в переопределенном обработчике таки вызвать qDebug(), то исходя из того, что обработчик переопределен, вместо qDebug() будет вызван опять тот же самый обработчик, и получится бесконечная рекурсия. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: LisandreL от Январь 05, 2014, 19:25 Выходит, что под Андроидом нельзя подменить обработчик qDebug() через код: Ну вообще-то qInstallMsgHandler должен возвращать указатель на предыдущий обработчик. Соотвественно при установке своего обработчика сохраняем оригинальный и вызываем его.Код: #if QT_VERSION < 0x050000 потому что 1. Если в обработчике выводить в консоль через printf() или через fprintf(stderr, "[DBG] %s\n", msg); то этот вывод не получит отладчик QtCreator. 2. Если в переопределенном обработчике таки вызвать qDebug(), то исходя из того, что обработчик переопределен, вместо qDebug() будет вызван опять тот же самый обработчик, и получится бесконечная рекурсия. Правда использовал такой подход в гуёвом приложении - работало, а вот в консольном приложении под винду qInstallMsgHandler возвращает 0 - баг или фича - не знаю. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 00:31 Я просто устанавливаю точки останова и нажимаю начать отладку. Программа запускается на андроиде и я могу выполнять ее пошагово. Кстати, все отладочные сообщения передаются и выводятся в окне QtCreator. Ну у меня пробные программки тоже дебажатся. А вот именно мой проект - не дебажится. Я сравниваю основные опции сборки в *.pro файле, никакого криминала не вижу. Ссылка на проект: https://github.com/xintrea/mytetra_dev Если есть возможность, попробуй у себя запустить. Не забудь только на ветку experimental переключиться перед сборкой. Я уже просто не знаю в какую сторону копать. Программа на Андроиде сегфолтится после первого окна (на десктопах все ок), а я даже отдебажиться не могу. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 06, 2014, 11:42 Программа на Андроиде сегфолтится после первого окна (на десктопах все ок), а я даже отдебажиться не могу. А у меня все работает. :)По крайней мере основное окно открывается, меню вызывается и по quit завершается. Если просто запускать или с отладкой - все ок. При запуске с отладкой получаю весь отладочный вывод. Да, проект собираю под armeabi-v7a. android-ndk r9c android-sdk r22.3 Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 12:02 А у меня все работает. :) По крайней мере основное окно открывается, меню вызывается и по quit завершается. Если просто запускать или с отладкой - все ок. При запуске с отладкой получаю весь отладочный вывод. Я разобрался в чем проблема (как минимум, у меня): http://www.linux.org.ru/forum/development/10016743?cid=10017655 Цитировать Проблема оказалась в том, что отладка под Андроид не может работать в случае, если в файле проекта *.pro вручную указан каталог сборки через опции OBJECTS_DIR и MOC_DIR и каталог результата через DESTDIR. Сборка в режиме Android Kit правильно распознает OBJECTS_DIR и MOC_DIR, и складывает туда moc-и и объектники. Сборка правильно распознает DESTDIR и складывает туда конечный бинарник. А при отладчике, похоже, что эти опции игнорируются. Причем никаких ошибок нигде не видно - лог запуска отладки аналогичен логу запуска программы, в которой каталоги не сконфигурированы и используются дефолтные. Просто молча не работает остановка на брекпоинтах. Решение проблемы: для сборки под Андроид в QtCreator 3.0.0 не использовать опции DESTDIR, OBJECTS_DIR, MOC_DIR, (и UI_DIR, я формами не пользуюсь, поэтому не проверял). То есть, не прописывать эти опции в *.pro файле. QtCreator сам установит в Android Kit эти опции по своему разумению. Тогда отладка будет работать. Совершенно не понимаю, почему у тебя работает, ты же использовал мой mytetra.pro при сборке, и отлаживался в QtCreator 3.0.0. Но дальше я продвинуться не могу, дело до основного экрана не доходит, у меня сегфолт на строке: Код: 902: if(QApplication::clipboard()->mimeData()->hasFormat("mytetra/records")) Это какой-то буллщит. Статический метод, тут никаких проблем с памятью быть просто не может. Пробовал в разных эмуляторах - в результате сегфолт на этой строке. На реальном устройстве отладка не работает, при попытке отладки имею сообщение: http://i.piccy.info/i9/d008faca0fa4dfda443fd4c5680ae9a8/1388998747/58688/597435/scr_317.png Девелопмент-меню в настройках активировано, отладка по USB включена. Может на девайсе еще что-то где-то надо включить? Рутовать девайс обязательно? Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: lit-uriy от Январь 06, 2014, 12:02 xintrea, чёйта http://webhamster.ru не доступен (504 Gateway Time-out).
П.С. Хотел инструкцию почитать Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 06, 2014, 12:05 Совершенно не понимаю, почему у тебя работает, ты же использовал мой mytetra.pro при сборке, и отлаживался в QtCreator 3.0.0. Да, я ничего не менял.Пробовал в разных эмуляторах - в результате сегфолт на этой строке. Я запускал на реальной железке.Девелопмент-меню в настройках активировано, отладка по USB включена. Может на девайсе еще что-то где-то надо включить? Рутовать девайс обязательно? Я только разрешал отладку, девайс не рутован.Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 12:22 xintrea, чёйта http://webhamster.ru не доступен (504 Gateway Time-out). П.С. Хотел инструкцию почитать Заработал. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 06, 2014, 12:26 А в эмуле у меня тоже падает. ::)
Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 12:31 Да, проект собираю под armeabi-v7a. android-ndk r9c android-sdk r22.3 Спасиб за картинку. Хоть у кого-то моя прога работает (только не у меня, факин щит). Давай по порядку. 1. Проект у меня собирается тоже в armeabi-v7a 2. У меня тоже android-ndk r9c 3. А как ты определяешь версию android-sdk? У меня только дата его известна - 20131030. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 12:34 Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 06, 2014, 12:35 3. А как ты определяешь версию android-sdk? У меня только дата его известна - 20131030. Запусти на десктопе программу android из sdk и выбери about, или в таблице всех установленных компонентов поле Rev.Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 12:44 3. А как ты определяешь версию android-sdk? У меня только дата его известна - 20131030. Запусти на десктопе программу android из sdk и выбери about, или в таблице всех установленных компонентов поле Rev.Да андроид SDK тоже версии 22.3. Теперь осталось понять, почему у тебя на девайсе работает, а в эмуле нет. Вопрос - на какой строчке у тебя сегфолтится в эмуле. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 06, 2014, 12:48 Вопрос - на какой строчке у тебя сегфолтится в эмуле. Стек возвратов:Цитировать 0 ?? 0x497890d0 1 QtAndroidClipboard::hasClipboardText() /home/bre/Qt5.2.0/5.2.0/android_armv7/plugins/platforms/android/libqtforandroid.so 0x496d8c52 2 ?? 0x2a183990 3 ?? 0x2a183990 Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 12:56 Стек возвратов: Цитировать 0 ?? 0x497890d0 1 QtAndroidClipboard::hasClipboardText() /home/bre/Qt5.2.0/5.2.0/android_armv7/plugins/platforms/android/libqtforandroid.so 0x496d8c52 2 ?? 0x2a183990 3 ?? 0x2a183990 Судя по состоянию стека, у тебя таки не работает отладка. Я правильно понимаю? Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: Old от Январь 06, 2014, 13:02 Судя по состоянию стека, у тебя таки не работает отладка. Я правильно понимаю? Да, на виртуальном устройстве не работает. ???Позже посмотрю еще, сейчас ребенок на моей машине смотрит мультики... :) Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 13:36 Ок.
В общем, как соберешся, из *.pro удаляй DESTDIR, OBJECTS_DIR, MOC_DIR, UI_DIR. Удаляй .json в каталоге сборки или вообще полностью каталог вида build-mytetra-Android_for_armeabi_v7a_GCC_4_8_Qt_5_2_0-Debug удаляй. Открывай в QtCreator заново, применяй дефолтный настройки и дебаг должен заработать. Да, и еще файл mytetra.pro.user не забудь удалить. Название: Re: Задарили Android-планшет, закомпилил прогу на Qt 5.2, запустил. А как дебажить? Отправлено: xintrea от Январь 06, 2014, 14:29 Да, на виртуальном устройстве не работает. ??? Я сделал минимальный проект, в нем тоже QApplication::clipboard() сегфолтится. Проект MyTetra тут вообще не при чем. Я создаю новую тему. По топику проблема решена - как дебажить нам уже известно. |