Как завершить работу gdbserver?

Я пытаюсь выполнить отладку с помощью 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?

Ответы

Ответ 1

Дать команду

monitor exit

с вашего gdb хоста перед завершением работы с клиентом. Если вы уже закончили его, просто присоедините его к другому.

Ответ 2

на linux пишите:

ps -ef |grep gdbserver

Теперь найдите pid процесса gdbserver, а затем

kill -9 <pid>

Ответ 3

gdbserver работает на цели, а не на хосте.

Прекращение действия зависит от цели. Например, если ваша цель - UNIX-ish, вы можете удаленно войти и использовать ps и убить из целевой оболочки.

Для любого типа цели перезагрузка должна убить gdbserver.

(Если этого недостаточно, чтобы ответить на ваш вопрос, укажите больше информации о цели в вопросе.)

Ответ 4

gdbserver должен выйти, когда ваша цель выйдет. Вопрос в том, как ваша цель выходит: это

  1. ничего не делать: просто провалиться
  2. возвращение 0 в основной
  3. выход (0) в главном

Из сеансов отладки, которые я запускал, в первом случае gdbserver не выйдет. Он будет просто вешать навсегда, и вы должны убить его. В последних двух случаях gdbserver выйдет.

Ответ 5

quit [выражение]


q Чтобы выйти из GDB, используйте команду quit (сокращенно q) или введите символ конца файла (обычно Cd). Если вы не предоставляете выражение, GDB будет нормально завершаться; в противном случае он завершит использование результата выражения как код ошибки.

Ответ 6

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.

Ответ 7

Вот сценарий, который я использую, чтобы запустить 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"