25

我正在尝试使用 gdbserver 进行调试。在我终止主机上的 gdb 客户端后,我看到 gdbserver 仍在监听:

Remote side has terminated connection.  GDBserver will reopen the connection.
Listening on port 5004

我试图用我在任何地方找到的所有东西都没有运气退出 gdbserver:quit,exit,q, monitor exit,Esc,Cnt+c... 没有什么能杀死它。此外,当我打开另一个终端并寻找运行 gdbserver 的进程(使用命令 ps,top)时,我在那里找不到它......我的问题是 - 如何终止 gdbserver ?

4

7 回答 7

22

发出命令

monitor exit

在终止客户端之前从您的主机 gdb获取。如果您已经终止它,只需附加另一个。

于 2014-05-14T06:18:41.810 回答
3

在linux上写:

ps -ef |grep gdbserver

现在找到gdbserver进程的pid,然后

kill -9 <pid>
于 2014-01-21T09:59:53.283 回答
3

monitor exit一步步

https://stackoverflow.com/a/23647002/895245提到了它,但这是您需要的完整设置。

偏僻的:

# 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 中测试。

于 2017-05-24T15:36:06.217 回答
2

gdbserver在目标上运行,而不是在主机上运行。

终止它取决于目标。例如,如果您的目标是 UNIX-ish,您可以从目标 shell 远程登录并使用 ps 和 kill。

对于任何类型的目标,重新启动都应该杀死gdbserver.

(如果这不足以回答您的问题,请在问题中包含有关目标的更多信息。)

于 2014-01-01T16:48:15.587 回答
1

退出[表达]


q 要退出 GDB,请使用 quit 命令(缩写为 q),或键入文件结束符(通常为 Cd)。如果不提供表达式,GDB 将正常终止;否则它将使用表达式的结果作为错误代码终止。

于 2016-02-09T15:40:20.367 回答
0

这是我用来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"
于 2017-10-06T15:54:43.520 回答
-1

gdbserver 应该在您的目标退出时退出。问题是你的目标是如何退出的:是吗?

  1. 什么都不做:只是跌倒
  2. 在 main 中返回 0
  3. 退出(0)在主要

从我一直在运行的调试会话中,在第一种情况下,gdbserver 不会退出。它会永远徘徊,你必须杀死它。在后两种情况下,gdbserver 将退出。

于 2014-01-21T16:03:56.080 回答