Хорошо, я так выяснил проблему. Я пишу ответ здесь на случай, если кому-то понадобится помощь в этом в будущем.
У меня есть две прошивки платформы. Каждый использует свою версию GDB.
Платформа A использует: GNU gdb (GNU Tools for ARM Embedded Processors) 7.4.1.20130913-cvs
.
Платформа B использует: GNU gdb (GNU Tools for Arm Embedded Processors 8-2019-q3-update) 8.3.0.20190703-git
.
Первым моим предположением было то, что компилятор оптимизировал переменную. Поэтому я проверил мои настройки оптимизации, и они были установлены на -O2
. Я изменил его на -O0
и перекомпилировал. Проблема все еще была.
Затем я кое-что заметил, когда сравнил выходные данные обеих версий GDB, когда выполнил команду load
, чтобы перенести мой файл elf в мой MCU. v7.4.1
скажет:
"/build/debug.elf" has changed; re-reading symbols.
v8.3.0
скажет:
"/build/myProject_v53.elf" has disappeared; keeping its symbols.
Мой файл эльфа переименовывается после каждой сборкис номером сборки, встроенным в имя. Это число увеличивается каждый раз при компиляции. У меня есть символическая ссылка на недавно созданный файл эльфа, и он называется debug.elf
. Поэтому debug.elf
указывает на новый файл elf каждый раз.
В предыдущей версии GDB было нормально использовать символическую ссылку. GDB не волновало, что имя файла изменилось, так как это была просто символическая ссылка. В новой версии GDB это не тот случай. GDB читает имя файла, на который указывает символическая ссылка, чтобы определить, изменилась ли таблица символов.
Я исправил это, изменив командный файл, который передается в GDB при запуске.
Я запускаю GDBиспользуя следующую команду в моем файле Makefile:
$(GDB) build/debug.elf --command=cfg/launch.gdb
В этом файле у меня есть ловушка для выполнения команды загрузки.
define hook-load
mon reset halt
end
Это позволяет мнесбросить и остановить устройство после программирования MCU.
Я изменил его, чтобы заставить таблицу символов обновляться каждый раз, когда я прошиваю MCU.
define hook-load
file build/debug.elf
mon reset halt
end
И это все.