Ответ 1
Вы ищете Многопроцессный режим для gdbserver и set remote exec-file filename
Когда вы выполняете обычный сеанс gdb в исполняемом файле на том же компьютере, вы можете дать команду run, и он запустит программу снова.
Когда вы запускаете gdb во встроенной системе, как и с командой target localhost: 3210 ', как вы запускаете программу заново, не покидая и перезагружая сеанс gdb?
Вы ищете Многопроцессный режим для gdbserver и set remote exec-file filename
К сожалению, я не знаю, как перезапустить приложение и поддерживать сеанс. Обходной путь - установить ПК обратно в точку входа вашей программы. Вы можете сделать это, вызвав:
jump function
или
set $pc=address
.
Если вы перепутали аргументы с main
, вам может понадобиться настроить их снова.
Edit:
Существует несколько предостережений с указанным выше методом, которые могут вызвать проблемы.
Итак, использование перехода - это не то же самое, что перезапуск программы.
Предположительно, вы запускаете gdbserver во встроенной системе.
Вы можете попросить его перезагрузить свою программу, а не выйти из target extended-remote
"jump_start" - обычный способ.
Пошаговая процедура
Пульт дистанционного управления:
# pwd contains cross-compiled ./myexec
gdbserver --multi :1234
Local:
# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
-ex 'set remote exec-file ./myexec' \
--args ./myexec arg1
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit
Протестировано в Ubuntu 14.04.
Также возможно передать аргументы CLI программе:
gdbserver --multi :1234 ./myexec arg1 arg2
и ./prog
устраняет необходимость в set remote exec-file ./myexec
, но это имеет следующие неприятности:
show args
и не сохраняется через перезагрузки: https://sourceware.org/bugzilla/show_bug.cgi?id=21980Передать переменные окружения и изменить рабочий каталог без перезагрузки: Как изменить переменные среды и рабочий каталог gdbserver -multi без перезагрузки?
Если вы используете обычный gdb, вы можете набрать 'run' shortcut 'r', и gdb спросит вас, хотите ли вы перезапустить программу
Для меня метод, описанный в 21.2 Пример запуска сеанса GDB отлично работает. Когда я введу monitor reset halt
позже в приглашении "(gdb)" целевое аппаратное обеспечение reset, и я могу повторно запустить приложение с помощью c
(= continue).
Команда load
может быть пропущена между прогонами, потому что нет необходимости снова и снова запускать программу.
На EFM32 Happy Gecko ни одно из предложений не будет работать для меня, так вот что я узнал из документации по интеграции GDB в среду Eclipse.
(gdb) mon reset 0
(gdb) continue
(gdb) continue
Это ставит меня в состояние, которое я ожидал бы при ударе reset из среды IDE.