Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Qt Creator remote debugging


Автор: McMan 18.10.2012, 21:27
Здравствуйте!
Есть ли у кого-нибудь опыт настройки удаленного дебага Qt на устройстве.

конфигурация на данный момент такая

Qt Creator 2.4.1 
host        ::         Linux ubuntu-11 3.0.0-26-generic #43-Ubuntu SMP Tue Sep 25 17:20:50 UTC 2012 i686 i686 i386 GNU/Linux
target     ::         Linux dm816x-evm 2.6.37 #23 Tue Sep 25 10:32:10 MSK 2012 armv7l unknown
toolchain  ARM GNU/Linux Sourcery G++ Lite 2009q1-203

qt-everywhere-opensource-src-4.8.3

понимаю, что проблема поставлена размыто, но буду признателен за любые ссылки и советы по теме. 
и, естественно, готов ответить на дополнительные вопросы.

Автор: tzirechnoy 19.10.2012, 15:45
Конкретно с Qt -- нет. Впрочем, со всем остальным (от Borland Delphi 1.0 до связки лисп+ассэмблер  внтури микроконтроллера с 96k RAM) отладка (удалённая, приближённая, не суть) выглядела одинаково -- нахожу какой-то способ отправлять текст из программы наружу (запись в файл на диске, отправка в последовательный порт, отправка подключившэйся через TCP/IP socket программе), ставлю в программе в интересующих меня местах отладочную печать по условиям включённых опцый отладки, и печатаю интересующие меня или вообще подозрительный значения вместе с их временем.

Да, бывают некоторые исключения, когда хватает какого-то рода стандартного профиля -- например, из ltrace или gprof. Это, впрочем, редкость и и так понятно, что делать.

Автор: bsa 19.10.2012, 16:59
tzirechnoy, ты видимо не понял. Речь идет о том, как к gdbserver запущенном на ARM прицепиться с помощью критора.

Автор: McMan 19.10.2012, 22:06
да.
товарищ bsa чуть более, чем наполовину прав...

я
собрал openssh на target
собрал qt-everywhere-opensource-src-4.8.3 debug

на данный момент
соединение с устройством есть, могу запустить, остановить приложение из криэйтора.
интересует  debug.

в логе дебаггера в Creator имею
&"Error while mapping shared library sections:\n"
>&"opt/qt-embedded/lib/libQtNetwork.so.4: No such file or directory.\n"

расскажите, ЧЯДНТ. 
в gdbinit (стартовом скрипте gdb) надо что-либо прописать? 
расскажите , если не в тягость, как - где должны лежать библиотеки?

Автор: tzirechnoy 20.10.2012, 13:24
Цитата
tzirechnoy, ты видимо не понял. Речь идет о том, как к gdbserver запущенном на ARM прицепиться с помощью критора.


Во-первых, вопрос был сформулирован по-другому.

Во-вторых, правильный ответ на этот вопрос -- никак, не страдайте фигнёй. gdb имеет смысл для взлома чужых бинарников и разбора глюков компилятора, но QtCreator в обоих этих случаях безсмысленнен. Для отладки своих программ есть более вменяемые средства, чем пытаться по шагам угнаться за процэссором.

Автор: McMan 20.10.2012, 20:07
tzirechnoy
вообщем-то, вопрос и не был сформулирован внятно в топ посте, признаю и прошу прощения еще раз
область новая для меня и просил any help
нельзя ли поподробнее прокомментировать вот это
Цитата

не страдайте фигнёй. gdb имеет смысл для взлома чужых бинарников и разбора глюков компилятора, но QtCreator в обоих этих случаях безсмысленнен. Для отладки своих программ есть более вменяемые средства, чем пытаться по шагам угнаться за процэссором.

дабы я не страдал фигней

Автор: tzirechnoy 21.10.2012, 18:15
Цитата
дабы я не страдал фигней 


Да я там как раз в первом своём комменте написал, как оно обычно делается. Коротко: текстовые логи изнутри программы. Всё остальное -- от лукавого.

Да, в винде иногда кажэтся, что понажымать F8 и покликать Watches будет быстрее и проще. Это глюки -- оно на самом деле очень тяжэло и медленно, по сравнению с рассматриванием своего лога.
 
Конструкт вида  debug = fopen(...); ... if (DEBUG[feature]) { fprintf(debug, ...)  } элементарен и сильно облегчает жызнь.

Автор: bsa 22.10.2012, 09:43
tzirechnoy, я тоже так думал, пока писал программы объемом в 1-2 тетрадного листра. Когда проекты стали объемнее, то отладчик стал сильно выручать. Например, как с помощью лога отладить падение программы в неизвестном месте? Причем, программа падает где-то через час работы.
С помощью отладчика это делается легко - он перехватывает событие сбоя и ты можешь изучить стек вызовов, все переменные и пр. В случае с логами тебе надо: 1) во все функции воткнуть логирование. 2) дождаться падения и определить в какой функции. 3) добавить в эту функцию дамп всех возможных переменных. 4) дождаться падения еще раз... Итого, это может занять минимум 2 часа (это если ты код пишешь, как метеор).

Автор: tzirechnoy 22.10.2012, 18:52
Цитата
Например, как с помощью лога отладить падение программы в неизвестном месте? Причем, программа падает где-то через час работы.


Вот с помощью лога это сделать банально. Лог перед падением прервётся. Точнее, если место -- действительно трудноуловимо, то, конечно, не всё так просто -- иначе бы в core dump глянул -- сразу место и нашёл. Да, это, кстати, довольно логичное применение gdb, и иногда полезное (особенно для чужых проектов), но это отнюдь не  пошаговая отладка. И интэграцыя в среду для трёх редко используемых команд как-то не очень нужна.

Так вот если место трудноуловимо, то для стандартного случая разноса несвоей памяти есть ElectricFence и другие профилирующие утилиты. В нестандартных случаях как минимум тактика работы с логами очевидна: выявляешь структуру, в которой обнаружывается критическое несоответствие, ставишь регулярную запись в лог её или хотя бы её соответствия ожыданиям, так и выясняешь, при какой операцыи её разносит. 

А вот что и как Вы собираетесь в течение часа смотреть отладчиком, яростно имитируя процэссор при помощи кнопок F7 и F8 и разглядывая окошко Watches -- это, как раз, очень интересный вопрос. А уж если падает при работе заказчика с программой -- то ещё и технически очень весёлый.

Автор: McMan 22.10.2012, 19:38
мне кажется начинается небольшой отладочный холиварчик ...
вот тут http://ru.wikipedia.org/wiki/Отладка_программы например 
Цитата

«Наш личный выбор — стараться не использовать отладчики, кроме как для просмотра стека вызовов или же значений пары переменных. Одна из причин этого заключается в том, что очень легко потеряться в деталях сложных структур данных и путей исполнения программы. Мы считаем пошаговый проход по программе менее продуктивным, чем усиленные размышления и код, проверяющий сам себя в критических точках.

Щёлканье по операторам занимает больше времени, чем просмотр сообщений операторов выдачи отладочной информации, расставленных в критических точках. Быстрее решить, куда поместить оператор отладочной выдачи, чем проходить шаг за шагом критические участки кода, даже предполагая, что мы знаем, где находятся такие участки. Более важно то, что отладочные операторы сохраняются в программе, а сессии отладчика переходящи.

Слепое блуждание в отладчике, скорее всего, непродуктивно. Полезнее использовать отладчик, чтобы выяснить состояние программы, в котором она совершает ошибку, затем подумать о том, как такое состояние могло возникнуть. Отладчики могут быть сложными и запутанными программами, особенно для новичков, у которых они вызовут скорее недоумение, чем принесут какую либо пользу…»

«Отладка сложна и может занимать непредсказуемо долгое время, поэтому цель в том, чтобы миновать большую её часть. Технические приёмы, которые помогут уменьшить время отладки, включают хороший дизайн, хороший стиль, проверку граничных условий, проверку правильности исходных утверждений и разумности кода, защитное программирование, хорошо разработанные интерфейсы, ограниченное использование глобальных переменных, автоматические средства контроля и проверки. Грамм профилактики стоит тонны лечения.»

— Брайан Керниган и Роб Пайк


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

Автор: tzirechnoy 23.10.2012, 10:11
Цитата
но вот, внезапно, хочется иметь коллегам удаленный дебаг на арм....


И почему-то именно в QtCreator. Передайте, что это несложно -- но глупо и вообще за такие вещи ужэ бьют по рукам.

Автор: bsa 23.10.2012, 12:36
McMan, какого года цитата?

Автор: McMan 23.10.2012, 15:51
подозреваю, 1999го

не хочу обсуждать парадигмы отладки. 
у кого нибудь есть ссылка на простейший мануал?

Автор: tzirechnoy 25.10.2012, 01:07
Цитата
у кого нибудь есть ссылка на простейший мануал? 


Да пожалуйста.  http://doc.qt.digia.com/qtcreator/creator-debugging.html  http://sourceware.org/gdb/onlinedocs/gdb/Remote-Debugging.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)