[Предыдущий: Разработка приложений для Symbian на Qt ] [Руководство по Qt Creator] [Следующий: Qt Creator и системы управления версиями] Qt Creator и отладка
|
Платформа | Компилятор | Отладчик |
---|---|---|
Linux, Unixes, Mac OS | gcc | GNU Symbolic Debugger (gdb) |
Windows/MinGW | gcc | GNU Symbolic Debugger (gdb) |
Windows | Microsoft Visual C++ Compiler | Debugging Tools for Windows/Microsoft Console Debugger (CDB) |
Интерфейс позволит вам:
Qt Creator отображает сырую информацию, предоставляемую отладчиком, явным и лаконичным образом. Это упрощает процесс отладки.
Qt Creator обладает базовую функциональность IDE: просмотр стека, просмотр локальных и наблюдаемых переменных, регистров и т.д. В дополнение к этому Qt Creator имеет дополнительные особенности, делая отладку основанных на Qt приложений проще. Интерфейс отладчика знает о внутреннем устройстве некоторых классов Qt, таких как QString, контейнеры QTL и, что особенно важно, QObject (и унаследованные от него классы), а также большинство контейнеров C++ Standard Library. Таким образом, отладчик может представлять их содержимое удобным способом.
Отладчик | Замечания |
---|---|
Gdb | На Linux требует gdb версии 6.8. На Mac OS X пожалуйста установите последний доступный для вашей версии OS Xcode. |
Debugging Tools for Windows | Использование этого отладчика требует установку пакета Debugging Tools for Windows 32-bit или 64-bit (версии 6.11.1.404 для 32-bit или 64-bit версии Qt Creator соответственно), который доступен для свободного скачивания с Microsoft Developer Network. Собранная версия Qt SDK for Windows будет использовать эту библиотеку если она присутствует в системе. При сборке Qt Creator с использованием компилятора Microsoft Visual C++, будет проверен путь "%ProgramFiles%\Debugging Tools for Windows" чтобы убедиться что все необходимые заголовочные файлы присутствуют. |
В режиме Отладка несколько прикрепляемых виджетов используется для взаимодействия с отлаживаемой программой. Часто используемые виджеты отображаются по умолчанию; используемые редко спрятаны. Для изменения настроек по умолчанию, выберите Отладка, а затем выберите Виды.
Здесь вы можете заблокировать и разблокировать положение ваших видов, а также показать или спрятать их. Среди видов, которые вы можете отобразить, есть Точки останова, Стек, Поток, Модули, Регистры, Дизассемблер и Отладчик. Расположение ваших прикрепляемых виджетов сохраняется для последующих сессий.
Чтобы запустить программу под отладчиком выберите в меню Отладка пункт Начать отладку, или нажмите F5. Qt Creator проверит является ли собранная программа актуальной и пересоберёт её при необходимости. Отладчик получит контроль и запустит программу.
Замечание: Запуск программы в отладчике может занять заметное количество времени, обычно в диапазоне от нескольких секунд до нескольких минут, если используются сложные особенности (как QtWebKit).
После запуска программы она работает как обычно и с обычной производительностью. Пользователь может прервать выполняемую программу выбрав Прервать из меню Отладка. Программа автоматически прерывается как только дойдет до точки останова.
Как только программа остановиться, Qt Creator:
Вы можете использовать виды отладчика для более подробного просмотра данных.
Чтобы закончить отладку нажмите Shift+F5. Строка кода может быть исполнена как одно целое с F10; чтобы войти в функцию или подфункцию используйте F11. Также вы можете продолжить выполнение программы с помощью F5. Можно продолжить выполнение программы до окончания текущей функции или перепрыгнуть на произвольную позицию в текущей функции.
Точки останова показываются в виде Точки останова, который включён по умолчанию. Этот вид также доступен когда отладчик и отлаживаемая программа не запущены.
Точки останова представляют место или набор мест в коде, которые при выполнении прервут отлаживаемую программу и передадут управление пользователю. Пользователь может просмотреть состояние прерванной программы или продолжить выполнение построчно или непрерывно.
Обычно точки останова связаны с файлом исходных кодов и строкой или началом функции -- оба варианта доступны в Qt Creator.
Также прерывание программы на точке останова может быть запрещено при определённых условиях.
Вы можете установить точки останова:
Вы можете удалить точку останова:
Точки останова могут быть установлены и удалены перед тем как программа будет запущена или во время её работы под отладчиком. Также точки останова могут быть сохранены вместе с сессией.
Когда отлаживаемая программа прерывается, Qt Creator отображает наследованные вызовы процедур, приводящие к текущему положению в следе стека вызовов. След стека строится из кадров стека вызовов, каждый из которых представляет конкретную функцию. Для каждой функции Qt Creator пытается получить имя файла и номер строки соответствующих файлов исходных кодов. Эти данные отображаются в виде Стек.
Так как стек вызовов, приводящий к текущему положению, может происходить из или проходить через код для которого нет отладочной информации, не все кадры стека имеют соответствующие положения в исходном коде. Эти кадры будут иметь серый цвет в виде Стек.
Если вы щёлкните на кадре с известным положением в исходном коде, текстовый редактор перейдёт в соответствующее положение и обновит вид Локальные и наблюдаемые переменные, делая их видимыми как будто программа была прервана перед входом в функцию.
Если прервано многопоточное приложение, то можно использовать вид Поток или выпадающий список с именем Поток в строке состояния отладчика для переключения от одного потока к другому. Вид Стек настроит себя соответственно.
Эти виды отображают понимание отладчиком компонентов приложения. По умолчанию оба вида спрятаны.
По умолчанию, виды Дизассемблер и Регистры спрятаны. Вид Дизассемблер отображает дизассемблированный код для текущей функции; вид Registers отображает текущее состояние регистров CPU. Оба вида полезны для низкоуровневых команд, таких как Перейти на одну инструкцию и Перейти через инструкцию.
Когда бы программа не остановилась под контролем отладчика, он получает информацию о верхнем кадре стека и отображает его в виде Локальные и наблюдаемые переменные. Он обычно включает информацию о параметрах функции в этом кадре, а также локальные переменные.
Составные переменные структур или классов в виде отображаются как "раскрываемые". Щёлкните на "+" чтобы раскрыть элемент и показать все его члены. Помимо отображаемые значения и типа, пользователь может просмотреть и перейти к низкоуровневой компоновке данных объекта.
Замечание: |
Gdb, и поэтому отладчик Qt Creator, работают с оптимизированной сборкой на Linux и Mac OS X. Тем не менее, оптимизация может привести к изменению порядка инструкций и иногда даже к полному удалению некоторых локальных переменных. В этом случае вид Локальные и наблюдаемые переменные может показывать неожиданные данные. |
Отладочная информация, предоставляемая gcc не включает достаточной информации о времени, когда переменная инициализируется. Поэтому, Qt Creator не может сказать является ли содержимое начальной переменной "настоящими данными" или "начальным шумом". Если QObject появляется неинициализированным, его значение указывается как "вне области". Тем не менее, не все неинициализированные объекты могут быть распознаны таким образом. |
Вид Локальные и наблюдаемые переменные также предоставляет доступ к наиболее мощной особенности отладчика: полное отображение данных, принадлежащих базовым объектам Qt. Для включения этой особенности, выберите Использовать помощник отладчика в меню Отладка. Вид Локальные и наблюдаемые переменные будут автоматически переупорядочен для отображения высокоуровневого вида объектов. Например, в случае с QObject, вместо отображения указателя на некоторую закрытую структуру данных, вы увидите список потомков, сигналы и слоты.
Аналогично, вместо отображения множества указателей и целых чисел, отладчик Qt Creator покажет содержимое QHash или QMap в упорядоченном виде. Также отладчик покажет данные доступа для QFileInfo и предоставит доступ к "реальному" содержимому QVariant.
Вид Локальные и наблюдаемые переменные может быть использован для изменения содержимого переменной простого типа данных, такого как int или float, когда программа прервана. Чтобы сделать это, щёлкните на столбце Значение, исправьте значение в встроенном редакторе и нажмите Enter (или Return).
Замечание: Набор наблюдаемых переменных сохраняется в вашей сессии.
При отладке Qt Creator динамически загружает вспомогательную библиотеку в вашу программу. Эта вспомогательная библиотека обеспечивает Qt Creator красивое отображение типов Qt и STL. Пакет Qt SDK уже содержит заранее скомпилированную библиотеку помощника отладчика. Чтобы создать собственную библиотеку помощника отладчика, выберите Параметры... из меню Инструменты и перейдите на закладку Qt 4 > Профили Qt. Так как внутренние структуры данных Qt могут меняться для разных версий, библиотека помощника отладчика собирается для каждой версии Qt.
В нашем примере TextFinder мы считывали текстовый файл в QString, а замет отображали его в QTextEdit. Предположим, что вы хотите взглянуть на эту строку QString line и посмотреть какую информацию она хранит. Выполните шаги, описанные ниже, чтобы разместить точку останова и просмотреть данные объекта QString.
![]() | Установка точки останова
|
![]() | Просмотр и удаление точек останова Точки останова указываются в виде Точки останова в режиме Отладка. Чтобы удалить точку останова, просто щёлкните на ней правой кнопкой мыши и выберите Удалить точку останова из контекстного меню. |
![]() | Просмотр локальных и наблюдаемых переменных Чтобы просмотреть содержимое строки line, перейдите на вид Локальные или наблюдаемые переменные. |
Предположим что мы изменили нашу функцию on_findButton_clicked() чтобы она перемещалась в начало документа и продолжала поиск после того, как курсор достигал конца документа. Эта функциональность может быть добавлена с помощью фрагмента кода, приведённого ниже:
void TextFinder::on_findButton_clicked() { QString searchString = ui->lineEdit->text(); QTextDocument *document = ui->textEdit->document(); QTextCursor cursor = ui->textEdit->textCursor(); cursor = document->find(searchString, cursor, QTextDocument::FindWholeWords); ui->textEdit->setTextCursor(cursor); bool found = cursor.isNull(); if (!found && previouslyFound) { int ret = QMessageBox::question(this, tr("End of Document"), tr("I have reached the end of the document. Would you like " "me to start searching from the beginning of the document?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if (ret == QMessageBox::Yes) { cursor = document->find(searchString, QTextDocument::FindWholeWords); ui->textEdit->setTextCursor(cursor); } else return; } previouslyFound = found; }
Тем не менее, если вы соберёте и запустите этот код, приложение не будет работать правильно из-за логической ошибки. Чтобы обнаружить эту логическую ошибку, пройдите через код, используя следующие кнопки:
[Предыдущий: Разработка приложений для Symbian на Qt ] [Руководство по Qt Creator] [Следующий: Qt Creator и системы управления версиями]
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Trademarks | Qt Creator 1.3.1 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |