#arm #gdb #embedded #elf #gdbinit
#arm #gdb #встроенный #elf #gdbinit
Вопрос:
Я отлаживаю микроконтроллер с помощью GDB remote. У меня есть несколько целей сборки, и я хотел бы иметь один общий файл .gdbinit для прошивки и / или отладки всех различных целей.
Я запускаю GDB с помощью BAT-скрипта, где в качестве параметра для GDB указан отладочный файл .elf. Таким образом, GDB загрузит символы, а также my .gdbinit будет выполняться правильно.
Мой gdbinit:
define target hookpost-remote
echo POST TARGET REMOTEn
# do stuff
#load ./path/to/foo.elf # I don't want this
load # This works if and only if the .elf has been loaded already
monitor reset
quit
end
target remote tcp:localhost:2331
Проблема в том, что запускается gdbinit и команда «target remote» выдается до загрузки двоичного файла, и GDB выдает ошибку:
.gdbinit:15: Error in sourced command file: No executable file specified. Use the "file" or "exec-file" command.
И непосредственно после этого:
Reading symbols from path/to/foo.elf
Все работает, если я удаляю команду «target remote» из gdbinit и вызываю ее вручную в консоли GDB, но я не хочу этого делать, я хочу все автоматизировать.
Как я могу автоматизировать команды после загрузки символов? Существует ли какой-либо хук, который срабатывает после завершения инициализации GDB и после запуска gdbinit? Могу ли я подключиться для публикации символов чтения?
Ответ №1:
Вероятно, вы используете .gdbinit
для некоторых целей, включая те, которые было бы лучше выполнить с помощью командного файла, передаваемого с помощью -x [cmds_file]
опции командной строки.
Небольшое экспериментирование показывает, что .gdbinit
выполняется до загрузки файла программы, в то время как -x
файл запускается после.
Комментарии:
1. Вы правы. Я пытался использовать -ix для загрузки командного файла GDB, но результат был таким же, как и с gdbinit. С помощью -x команды действительно выполняются после загрузки программного файла, и это решает мою проблему. Вот некоторая соответствующая информация.