GDB автоматизирует команды после загрузки символов

#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 команды действительно выполняются после загрузки программного файла, и это решает мою проблему. Вот некоторая соответствующая информация.