-
Notifications
You must be signed in to change notification settings - Fork 5
gdb
Для отладки программ на встраиваемых системах можно использовать несколько вариантов:
- gdb локальная отладка
- gdb прямое подключение программатора
- gdb удаленная отладка
- gdb отладка ядра Linux
- gdb отладка прошивки в эмуляторе QEMU
- gdb настройка Eclipse
- https://habr.com/ru/company/rainbow/blog/251053/
- http://emb-linux.narod.ru/articles/debug/debug.html
Все обычно начинают писать программу с того, что добавляют к ней возможность вести логи её работы. Часто бывает так, что одних только логов не хватает. Бывает, что хочется программу отладить не только по шагам, но и с остановкой по срабатыванию условия на значения переменной. В Linux (и не только) для этого есть отладчик gdb. проблема только в том, что если мы пишем программу не для x86 платформы, то и отладчик нам нужен для нашей целевой платформы. Этот отладчик состоит из двух частей -- бинарник gdb
для HOST (x86) для запуска на нашей рабочей станции, и gdbserver
скомпилированный и прошитый на "железку".
Для микроконтроллеров вместо отладочного сервера идет специальная программа, транслирующая команды отладочного протокола в электрические сигналы, передаваемые микроконтроллеру через программатор. Однако и для микроконтроллера, если у него достаточно ресурсов, может быть написан свой gdbserver
(в виде библиотеки), который позволит вам отлаживаться без программатора по UART, Ethernet, RS485, и любому другому протоколу передачи данными (через программу-конвертер со стороны gdb
). Ну то есть, если вас угораздило делать некоторое устройство, работающее через LoRaWAN, NB-IoT или GPRS-модем, наличие такого gdbstub в прошивке микроконтроллера позволит вам сделать с вашим устройством все что угодно, на что хватит пропускной способности канала данных -- перешить прошивку по частям или целиком, посмотреть или изменить любые регистры или области памяти, подергать ногами напрямую управляя внешними устройствами, снять трассировку работы аппаратуры, запустить произвольный код.
Бывает также так, что просто по какой-то причине мы вообще не можем использовать никакой из отладчиков (например, между нами и целевой платой нет постоянной устойчивой и достаточно быстрой связи или вообще связи нет), или по какой-то причине под отладчиком программа работает без сбоев, а без отладчика падает. В этой ситуации нам может помочь core-файл (или core-dump). Это посмертный слепок с программы, в момент, когда она приводит к непоправимой ошибке, по нему можно узнать внутри какой функции и в какой строчке произошла ошибка, значения локальных переменных, проследить всю цепочку вызовов.