Плагин отладки

Прежде чем мы продолжим, вам необходимо установить плагин аппаратной отладки C / C ++ GDB для Eclipse . Щелкните меню « Справка» и выберите « Установить новое программное обеспечение…», чтобы открыть окно с названием « Установить» . В этом окне из раскрывающегося списка Работа с выберите самый последний сайт обновления CDT - это будет запись типа

 (например 

) или что-то очень похожее, в зависимости от версии Eclipse . Поместите курсор в текстовое поле фильтра - то, которое имеет серый

введите текст фильтра

, чуть ниже Работа с ярлыком - и введите

GDB

там. Через некоторое время вы должны увидеть несколько предложений - установите флажок рядом с C / C ++ GDB Hardware Debugging в группе CDT Optional Features и нажмите Next в нижней части окна. На следующем шаге - « Сведения об установке» - просто снова нажмите « Далее» . На последнем этапе - Просмотр лицензий - вы должны выбрать Я принимаю условия лицензионного соглашения (очевидно, после того, как вы внимательно его прочитали, полностью поняли и проконсультировались со своими юристами - это то, что мы все делаем, когда сталкиваемся со стеной непонятного юридический текст (;) и нажмите Готово. Процесс установки плагина займет некоторое время (прогресс будет отображаться в строке состояния в нижней части окна Eclipse ), и когда он завершится, вам будет предложено перезапустить Eclipse - подтвердите с помощью Restart Now, и все готово. этот шаг.

Перспектива отладки

Если вы никогда не выполняли отладку в текущей установке Eclipse , перспектива отладки не будет видна. Перспектива в Eclipse , является расположение панелей, вкладок, кнопок и так далее - все предыдущие скриншоты были сделаны в настройки по умолчанию для C / C ++ перспектива, которая состоит из Project Explorer , слева, редактор в центре, Outline справа и различные вкладки ( Проблемы , Консоль ,…) внизу. За небольшими исключениями (строка меню и панель инструментов вверху) перспектива влияет почти на все, что вы видите. Чтобы открыть перспективу отладки, щелкнитеОкно> Перспектива> Открыть перспективу> Отладка . После открытия вы можете быстро переключаться между перспективами, используя маленькие кнопки в правой части панели инструментов (справа от текстового поля быстрого доступа ) - первая (со знаком плюс) используется для открытия других перспектив, следующая ( с буквой C внутри квадрата) - это перспектива C / C ++, а последняя (зеленая ошибка) - перспектива отладки .

В перспективе Debug Project Explorer вообще не виден, редактор, Outline и панель с различными вкладками ( Console , Problems ,…) перемещены немного ниже, а верхняя часть окна занята вкладкой Debug слева (это здесь будет отображаться стек вызовов), а правая часть зарезервирована для таких вкладок, как переменные , точки останова , регистры , выражения и некоторые другие.

Настройка и запуск OpenOCD

На самом деле это самая сложная часть всего процесса, поскольку точная процедура немного отличается для каждой платы или комбинации отладочного интерфейса с целевой микросхемой. В этом абзаце мы будем использовать плату STM32F4DISCOVERY , поэтому для другой настройки вам необходимо соответствующим образом настроить некоторые конфигурации. Также стоит отметить, что драйверы для интерфейса отладки - так что в случае нашей платы это будет ST-LINK / V2 - должны быть установлены в вашей системе (если еще не установлены), в противном случае действия, описанные далее в этой главе, будут не работать.

OpenOCD работает как удаленный сервер GDB , поэтому по сути является посредником между отладчиком GDB и оборудованием. Всякий раз, когда вы хотите начать сеанс отладки, OpenOCD должен работать в фоновом режиме. Если ваш сеанс отладки завершается, вам не нужно закрывать или перезапускать OpenOCD - он может продолжать работать в фоновом режиме столько, сколько потребуется. OpenOCD также не обязательно запускать через Eclipse - вы можете запустить его вручную в эмуляторе терминала, если хотите. Фактически - OpenOCD даже не нужно запускать на том же компьютере, что и ваш отладчик, если он доступен по сети. Но вернемся к основной теме ...

В Eclipse есть функция External Tools , которая позволяет запускать любой исполняемый файл, который вам нравится, прямо из IDE . Это то, что мы будем использовать для запуска OpenOCD . Чтобы создать новую конфигурацию, выберите «Выполнить»> «Внешние инструменты»> «Конфигурации внешних инструментов…» , в списке слева выберите « Программа» и нажмите кнопку « Новая конфигурация запуска» (лист бумаги со знаком плюса, первый слева над списком). В качестве альтернативы вы можете просто дважды щелкнуть элемент « Программа» в левом списке.

Выберите программу, которая будет выполняться, с помощью кнопки « Обзор файловой системы…» в группе « Местоположение » на вкладке « Главное ». Перейдите в папку с двоичным файлом OpenOCD (т.е.

С: \ openocd- 0.10 . 0 \ bin-x64

для 64-битной Windows ,

/ usr / bin

для Linux ) выберите исполняемый файл (

openocd. EXE

для Windows ,

openocd

для Linux ) и нажмите Открыть, чтобы закрыть окно. Поместите курсор в текстовое поле Аргументы внизу вкладки Main и введите любые аргументы, которые должны быть переданы в OpenOCD - в случае платы STM32F4DISCOVERY это будет просто

-f доска / stm32f4discovery. cfg

. На этом этапе вы также можете изменить имя конфигурации запуска по умолчанию.

New_configuration

к чему-то более информативному. Лично я называю конфигурации либо

openocd + < доска >

 или же 

openocd + < интерфейс > + < цель >

, поэтому в данном случае я назвал его 

openocd + stm32f4discovery

. Вы можете сохранить текущее состояние конфигурации, нажав кнопку Применить .

Фактически, на данный момент конфигурация уже может использоваться, но есть лишь несколько незначительных вещей, которые стоит настроить. Перейдите на вкладку « Сборка » и снимите флажок « Сборка перед запуском» . Сборка вашего проекта перед запуском OpenOCD полезна, если вы хотите использовать OpenOCD для программирования чипа, но в случае типичного сеанса отладки здесь нет необходимости (мы вернемся к этому позже - в главе о конфигурациях GDB ). На вкладке « Общие » в группе « Сохранить как » вы можете выбрать, будет ли эта конфигурация запуска сохраняться в конфигурации рабочего пространства Eclipse - это называется локальным файлом. (вводит в заблуждение, если вы спросите меня) - или как обычный файл с именем 

< имя > .launch

где-нибудь в рабочей области - это называется Общий файл . Моя личная практика - использовать второй вариант, сохранить файл в папке проекта и создать резервную копию с помощью системы контроля версий (например, git ). При таком подходе очень легко переносить проект и его конфигурации запуска между разными компьютерами. Также возможно копировать такой файл конфигурации запуска между разными проектами - в 99,666% случаев конфигурации запуска OpenOCD зависят только от оборудования (они не имеют частей для конкретного проекта). Для этого выберите Общий файл в группе « Сохранить как », нажмите кнопку « Обзор…» справа от этого параметра, выберите папку своего проекта ( теств нашем примере) и нажмите ОК . Для облегчения доступа к этой конфигурации запуска вы также можете выбрать пункт « Внешние инструменты» в меню « Отображать в избранном» . Снова сохраните конфигурацию ( кнопка « Применить» ) и нажмите « Выполнить», чтобы протестировать ее.

Если вы являетесь пользователем Windows и запускаете выбранный исполняемый файл OpenOCD впервые , вы можете увидеть окно предупреждения системы безопасности Windows . Просто выберите Разрешить доступ, чтобы OpenOCD мог использовать требуемые сетевые функции.

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-10-300x217.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-10.png 527w" alt="" width="150" height="108" class="alignnone size-thumbnail wp-image-661" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

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

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-11-300x226.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-11-768x579.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-11.png 1010w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-663" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Когда имя конфигурации запуска и имя исполняемого файла имеют префикс <terminated> , это означает, что OpenOCD не может успешно запуститься из-за какой-либо проблемы. В этом случае некоторая информация о первопричине такой проблемы будет напечатана на вкладке « Консоль ».

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

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-12-300x226.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-12-768x579.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-openocd-12.png 1010w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-664" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Оставьте OpenOCD включенным, так как он нам понадобится в следующей главе.

Настройка и запуск GDB

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

Щелкните Выполнить> Конфигурации отладки… , в появившемся окне выберите « Отладка оборудования GDB» слева и нажмите кнопку « Новая конфигурация запуска» над списком. Как и раньше, вместо использования кнопки « Новая конфигурация запуска» вы можете дважды щелкнуть элемент « Аппаратная отладка GDB» в списке, чтобы добиться того же эффекта.

В новой конфигурации, которую мы создали, должны быть уже заполнены текстовые поля Project и C / C ++ Application на вкладке Main . Если они пусты - не паникуйте ! Сначала используйте кнопку « Обзор» рядом с полем « Проект», чтобы выбрать наш тестовый проект, а затем нажмите « Поиск проекта…» под приложением C / C ++, чтобы найти

.elf

файл, который будет использоваться отладчиком. Обратите внимание - ваш проект должен быть уже построен, иначе не будет

.elf

файл, который нужно искать. Перед запуском группы выберите переключатель « Включить автоматическую сборку » в группе « Сборка» (при необходимости) .

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-3-300x225.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-3-768x576.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-3.png 800w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-698" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Перейдите на вкладку отладчик . Поместите курсор в текстовое поле GDB Command и замените значение по умолчанию на

рука-none-eabi-gdb

(это имя исполняемого файла отладчика). Вам также необходимо изменить номер порта на 3333.

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-4-300x225.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-4-768x576.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-4.png 800w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-676" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

На вкладке « Автозагрузка » есть еще несколько вещей, которые можно отредактировать . Сначала снимите два флажка вверху в группе « Команды инициализации » - « Сброс» и «Задержка (секунды)» и « Остановить» . Эти флажки не имеют никакого эффекта при использовании OpenOCD , поэтому просто отключите их. Однако на самом деле нам нужно сбросить и остановить чип, поэтому поместите курсор чуть ниже этих флажков и введите

остановка сброса монитора

там. Если интересно -

монитор

это команда GDB, которая передает свои аргументы удаленному серверу GDB (в данном случае - OpenOCD ), а

сбросить остановку

это команда OpenOCD, которая, как ни странно, сбрасывает и останавливает чип (; Прокрутите страницу вниз, установите флажок слева от Установить точку останова в и введите

основной

в текстовое поле справа. Также установите флажок рядом с « Возобновить» .

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-5-281x300.png 281w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-5-768x821.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-5.png 800w" alt="" width="140" height="150" class="alignnone size-thumbnail wp-image-678" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Идея с последней вкладкой - Common - идентична идее для OpenOCD , поэтому повторять здесь описание нет смысла.

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-6-300x225.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-6-768x576.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-6.png 800w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-679" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Нажмите « Применить» и нажмите « Отладка». Через короткое время (несколько секунд) вы должны увидеть, что ваш сеанс отладки остановлен в начале

main ()

. Здесь!

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-7-300x226.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-7-768x579.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-7.png 1010w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-681" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Как и в случае с конфигурацией запуска OpenOCD , та, которую мы только что создали для GDB , также легко доступна через кнопку Debug в центре панели инструментов Eclipse (зеленый символ ошибки). Поведение кнопки также идентично: при нажатии на кнопку запускается последняя использованная конфигурация запуска, при раскрытии черным треугольником отображается список избранного.

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-8-300x226.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-8-768x579.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-configure-gdb-8.png 1010w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-687" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

Завершение сеанса отладки и OpenOCD

Мы знаем, как запустить инструменты, но как их остановить? Рекомендуется сначала остановить GDB и только затем остановить OpenOCD , так как завершение работы OpenOCD приведет к прерыванию GDB - немедленно или при попытке взаимодействия с ним. На самом деле это логично - если вы выключите удаленный сервер GDB ( OpenOCD ), GDB не сможет продолжить работу без него. Чтобы завершить сеанс отладки, сначала необходимо выбрать его из списка на вкладке « Отладка ». На самом деле не имеет значения, какой из них вы выберете, если он помечен как GDB Hardware Debugging или любой из его дочерних элементов. Затем просто нажмите кнопку « Завершить» вПанель инструментов Eclipse (красный символ остановки).

Процедура завершения OpenOCD идентична.

Отладка без программирования микросхемы

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

Open Debug Configurations again (Run > Debug Configurations…), select our only debug configuration (test Default if you did not change the name given automatically by Eclipse) in the left list and duplicate it by clicking the second button from the left above the list (two filled sheets of paper). This can be also done by right-clicking the configuration and selecting Duplicate.

https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-without-programming-0-300x225.png 300w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-without-programming-0-768x576.png 768w, https://distortos.org/wp-content/uploads/2018/04/eclipse-debugging-without-programming-0.png 800w" alt="" width="150" height="113" class="alignnone size-thumbnail wp-image-700" style="box-sizing: inherit; border: 0px; height: auto; max-width: 100%; vertical-align: middle; display: block;" loading="lazy" />

First thing to do in the newly created configuration is to give it some better name – for example test without load. Next, on the Main tab select Disable auto build radio button in the Build (if required) before launching group to prevent Eclipse from recompiling the application. Switch to Startup tab and deselect Load image from Load image and Symbols group. Click Apply and then Close.

Запустите OpenOCD (если он еще не запущен) и запустите нашу новую конфигурацию GDB . Если все работает нормально, вы должны увидеть что-то очень похожее на предыдущее, однако запуск занимает значительно меньше времени - здесь (в VirtualBox ) ~ 3 секунды против ~ 9 секунд при программировании.

Отладка приложения

Давайте, наконец, посмотрим на какое-нибудь действие! Начните с чего - нибудь простого - Нажмите Step Over кнопку из Затмения панели инструментов (вторая желтая стрелка, тот , который идет вверх-вправо-вниз). Через короткое время вы увидите, что ваша программа действительно продвинулась вперед - зеленое выделение текста и синяя стрелка на краю теперь находятся в строке 33 - той, которая имеет

distortos :: ThisThread :: sleepFor ( std :: chrono :: seconds { 1 }) ;

. Давайте попробуем то же самое еще раз - теперь это займет немного больше времени (в конце концов, вы «перешагиваете» долгую задержку в одну секунду), но в конце концов мы снова попадем в строку 32.

Теперь нажмите кнопку « Шаг с заходом» (первая желтая стрелка, эта идет вправо). Вы увидите, что открыта новая вкладка редактора, и теперь мы внутри

functionFromFolder ()

. Если вы снова нажмете « Шаг с заходом» , вы, наконец, окажетесь в

functionFromSubfolder ()

. Нажмите « Перейти», чтобы вернуться к

main ()

.

Давайте посмотрим, что произойдет, когда вы нажмете кнопку « Возобновить» (желтый прямоугольник с зеленым символом воспроизведения ). Хм… ничего особенного, но вроде приложение действительно запущено. Давайте остановим его, нажав кнопку « Приостановить» (желтый символ паузы ) - мы окажемся в каком-то совершенно случайном месте, скорее всего, где-то в незанятом потоке.

Итак, как нам вернуться к нашему основному потоку? В редакторе перейдите на вкладку с

основной. cpp

и поместите точку останова в строку 32, дважды щелкнув клетчатое поле (слева от номеров строк). Если вы все сделали правильно, вы должны увидеть синий кружок с галочкой. Нажмите « Возобновить», и программа будет остановлена ​​внутри.

main ()

. Если вы возобновите его снова, он будет останавливаться на том же месте после завершения цикла цикла.

Чтобы удалить точку останова, дважды щелкните ее или перейдите на вкладку « Точки останова » и удалите ее там. Вы можете удалить выбранную точку останова (один серый крестик) или удалить все точки останова, используемые в приложении (два серых крестика). Кроме того, также можно отключить точки останова - все сразу с помощью кнопки « Пропустить все точки останова» (перечеркнутый синий кружок) или одну за другой с их флажками.


Это всего лишь краткий обзор отладки в Eclipse , но, надеюсь, он послужит вам хорошей отправной точкой. Отладчик Eclipse очень мощный, поэтому невозможно охватить все сложные темы в одной статье. То же самое и с конфигурацией OpenOCD - тема, которая может легко заполнить несколько статей. Фундамент заложен, отдых придет с практикой и личным опытом.