2010-08-22 4 views
1

Я пытаюсь отлаживать приложение на встроенном устройстве, работающем на старой версии Linux/Qtopia. Я попросил о помощи на форумах QT, но люди там не знают о старых программах и. Мне бы очень хотелось помочь с помощью стратегий отладки.Сложно отлаживать встроенное приложение

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

Нет никакой ошибки или сигнала seg, но моя программа не будет продолжена, и деструктор не будет вызван. Мне кажется, что одна из первых вещей, которые произойдут в цикле событий, - это событие изменения размера и когда это вызвано, может измениться, если вы бежите с консоли или значка. Кроме того, различные виджеты в моем графическом интерфейсе будут инициализированы и нарисованы так, что это также потенциальный источник ошибок, если я не настроил что-то должным образом.

Параметры моей отладки ограничены, так как область, где происходит авария, не находится под моим контролем. Я попытался войти в файл и распечатать его в stderr, но это не помогло. Когда я добрался до состояния, где он запускается из значка, но не из консоли, я попытался запустить в gdb и strace, но он прошел нормально - классическая проблема отладки программного обеспечения, инициализирующаяся по-разному.

Моя следующая мысль - попытаться заставить дамп ядра, а затем проанализировать это. Как заставить основной дамп? Есть ли лучшая стратегия?

ответ

2

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

Вы говорите, что запись в файл и печать на stderr не помогли. Почему нет? Вы печатаете в файл соответствующую отладочную информацию? Используете ли вы источники Linux/Qtopia и добавляете журнал отладки?

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

+0

В конце моего конструктора я выводю на stderr и вызываю функцию инициализации с помощью таймера одиночного выстрела. Он должен запускать эту функцию, как только цикл события не занят. Первое, что я делаю в функции initialise, выводят на stderr, но программа выходит из строя, не отображая ее. Вот почему я думаю, что авария происходит в Qtopia. У меня нет источников Linux и Qtopia. Даже если бы я это сделал, это старые версии и перестройка их старыми компиляторами и т. Д. Была бы серьезной проблемой. – koan

+0

В итоге я обнаружил эту ошибку в проблеме с тем, как я установил панель инструментов и меню в конструкторе. Хотя я и не нашел точной причины крушения, похоже, сейчас работает. Принимая этот ответ, поскольку это единственный ответ и содержит разумные советы. – koan

Смежные вопросы