Russian Qt Forum
Ноябрь 23, 2024, 01:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [Решено] Есть Android-планшет, закомпилил Qt 5.2 прогу, запустил. Как дебажить?  (Прочитано 15121 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Январь 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? У меня не получилось. Мне нужно точно знать последовательность действий.
« Последнее редактирование: Июль 24, 2023, 09:51 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Январь 04, 2014, 14:19 »

Я просто устанавливаю точки останова и нажимаю начать отладку. Программа запускается на андроиде и я могу выполнять ее пошагово.
Кстати, все отладочные сообщения передаются и выводятся в окне QtCreator.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Январь 04, 2014, 16:00 »

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

Блин, а у меня не останавливается отладка на брекпоинтах. Даже не знаю что делать.

Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #3 : Январь 04, 2014, 22:01 »

Кстати, все отладочные сообщения передаются и выводятся в окне QtCreator.

Два вопроса, мне очень важно знать оба ответа:

1. У тебя видны в QtCreator сообщения через qDebug()?

2. У тебя видны в QtCreator сообщения через printf()?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Январь 04, 2014, 23:39 »

1. У тебя видны в QtCreator сообщения через qDebug()?
Да.

2. У тебя видны в QtCreator сообщения через printf()?
Нет.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #5 : Январь 05, 2014, 00:34 »

1. У тебя видны в QtCreator сообщения через qDebug()?
Да.

2. У тебя видны в QtCreator сообщения через printf()?
Нет.

Ага, спасибо.

Выходит, что под Андроидом нельзя подменить обработчик qDebug() через код:

Код:
   #if QT_VERSION < 0x050000
    qInstallMsgHandler(myMessageOutput);
   #else
    qInstallMessageHandler(myMessageOutput);
   #endif

потому что

1. Если в обработчике выводить в консоль через printf() или через fprintf(stderr, "[DBG] %s\n", msg); то этот вывод не получит отладчик QtCreator.

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

Собираю информацию по крупицам
http://webhamster.ru
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Январь 05, 2014, 19:25 »

Выходит, что под Андроидом нельзя подменить обработчик qDebug() через код:

Код:
   #if QT_VERSION < 0x050000
    qInstallMsgHandler(myMessageOutput);
   #else
    qInstallMessageHandler(myMessageOutput);
   #endif

потому что

1. Если в обработчике выводить в консоль через printf() или через fprintf(stderr, "[DBG] %s\n", msg); то этот вывод не получит отладчик QtCreator.

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

Ну вообще-то qInstallMsgHandler должен возвращать указатель на предыдущий обработчик. Соотвественно при установке своего обработчика сохраняем оригинальный и вызываем его.
Правда использовал такой подход в гуёвом приложении - работало, а вот в консольном приложении под винду qInstallMsgHandler возвращает 0 - баг или фича - не знаю.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #7 : Январь 06, 2014, 00:31 »

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

Ну у меня пробные программки тоже дебажатся.

А вот именно мой проект - не дебажится. Я сравниваю основные опции сборки в *.pro файле, никакого криминала не вижу.

Ссылка на проект: https://github.com/xintrea/mytetra_dev

Если есть возможность, попробуй у себя запустить. Не забудь только на ветку experimental переключиться перед сборкой.

Я уже просто не знаю в какую сторону копать. Программа на Андроиде сегфолтится после первого окна (на десктопах все ок), а я даже отдебажиться не могу.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Январь 06, 2014, 11:42 »

Программа на Андроиде сегфолтится после первого окна (на десктопах все ок), а я даже отдебажиться не могу.
А у меня все работает. Улыбающийся
По крайней мере основное окно открывается, меню вызывается и по quit завершается.
Если просто запускать или с отладкой - все ок. При запуске с отладкой получаю весь отладочный вывод.

Да, проект собираю под armeabi-v7a.
android-ndk r9c
android-sdk r22.3
« Последнее редактирование: Январь 06, 2014, 11:47 от Old » Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #9 : Январь 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 включена. Может на девайсе еще что-то где-то надо включить? Рутовать девайс обязательно?

Записан

Собираю информацию по крупицам
http://webhamster.ru
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Январь 06, 2014, 12:02 »

xintrea, чёйта http://webhamster.ru не доступен (504 Gateway Time-out).

П.С.
Хотел инструкцию почитать
Записан

Юра.
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Январь 06, 2014, 12:05 »

Совершенно не понимаю, почему у тебя работает, ты же использовал мой mytetra.pro при сборке, и отлаживался в QtCreator 3.0.0.
Да, я ничего не менял.

Пробовал в разных эмуляторах - в результате сегфолт на этой строке.
Я запускал на реальной железке.

Девелопмент-меню в настройках активировано, отладка по USB включена. Может на девайсе еще что-то где-то надо включить? Рутовать девайс обязательно?
Я только разрешал отладку, девайс не рутован.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #12 : Январь 06, 2014, 12:22 »

xintrea, чёйта http://webhamster.ru не доступен (504 Gateway Time-out).

П.С.
Хотел инструкцию почитать

Заработал.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Январь 06, 2014, 12:26 »

А в эмуле у меня тоже падает.  Строит глазки
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #14 : Январь 06, 2014, 12:31 »

Да, проект собираю под armeabi-v7a.
android-ndk r9c
android-sdk r22.3

Спасиб за картинку. Хоть у кого-то моя прога работает (только не у меня, факин щит).

Давай по порядку.

1. Проект у меня собирается тоже в armeabi-v7a
2. У меня тоже android-ndk r9c
3. А как ты определяешь версию android-sdk? У меня только дата его известна - 20131030.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.207 секунд. Запросов: 23.