Ответ 1
Дать команду
monitor exit
с вашего gdb хоста перед завершением работы с клиентом. Если вы уже закончили его, просто присоедините его к другому.
Я пытаюсь выполнить отладку с помощью gdbserver. после того как я завершаю клиент gdb на хосте, я вижу, что gdbserver все еще прослушивает:
Remote side has terminated connection. GDBserver will reopen the connection.
Listening on port 5004
Я попытался выйти из gdbserver со всем, что нигде не нашел, удачи: quit, exit, q, exit, Esc, Cnt + c... ничего не убивает. Более того, когда я открывал другой терминал и искал процесс, запускающий gdbserver (с командами ps, сверху), я не мог найти его там... мой вопрос: как прекратить gdbserver?
Дать команду
monitor exit
с вашего gdb хоста перед завершением работы с клиентом. Если вы уже закончили его, просто присоедините его к другому.
на linux пишите:
ps -ef |grep gdbserver
Теперь найдите pid процесса gdbserver, а затем
kill -9 <pid>
gdbserver
работает на цели, а не на хосте.
Прекращение действия зависит от цели. Например, если ваша цель - UNIX-ish, вы можете удаленно войти и использовать ps и убить из целевой оболочки.
Для любого типа цели перезагрузка должна убить gdbserver
.
(Если этого недостаточно, чтобы ответить на ваш вопрос, укажите больше информации о цели в вопросе.)
gdbserver должен выйти, когда ваша цель выйдет. Вопрос в том, как ваша цель выходит: это
Из сеансов отладки, которые я запускал, в первом случае gdbserver не выйдет. Он будет просто вешать навсегда, и вы должны убить его. В последних двух случаях gdbserver выйдет.
quit [выражение]
q Чтобы выйти из GDB, используйте команду quit (сокращенно q) или введите символ конца файла (обычно Cd). Если вы не предоставляете выражение, GDB будет нормально завершаться; в противном случае он завершит использование результата выражения как код ошибки.
monitor exit
шаг за шагом
fooobar.com/questions/7809336/... упоминает об этом, но это полная настройка, в которой вы нуждаетесь.
Дистанционный пульт:
# pwd contains cross-compiled ./myexec
gdbserver --multi :1234
Местный:
# 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) monitor exit
Протестировано в Ubuntu 14.04.
Вот сценарий, который я использую, чтобы запустить gdb server
через ssh и убить его при необходимости с помощью ctrl + c
#!/usr/bin/env bash
trap stop_gdb_server INT
function stop_gdb_server {
ssh remote-srv-name "pkill gdbserver"
echo "GDB server killed"
}
ssh remote-srv-name "cd /path/to/project/dir/ && gdbserver localhost:6789 my-executable"