如何终止gdbserver?

问题描述 投票:0回答:8

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

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

我尝试使用我在任何地方找到的所有内容退出 gdbserver,但没有成功:退出、退出、q、监视器退出、Esc、Cnt+c...没有什么可以杀死它。此外,当我打开另一个终端并查找运行 gdbserver 的进程(使用命令 ps,top)时,我在那里找不到它...... 我的问题是 - 如何终止 gdbserver ?

linux gdb gdbserver
8个回答
25
投票

下达命令

monitor exit

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


4
投票

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


2
投票

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

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

对于任何类型的目标,重新启动都会杀死

gdbserver

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


2
投票

在Linux上写:

ps -ef |grep gdbserver

现在找到gdbserver进程的pid然后

kill -9 <pid>

1
投票

这是一个脚本,我用它通过 ssh 启动

gdb server
并在必要时使用 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"
    

0
投票
退出[表情]


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


0
投票
我要写另一个答案,因为这些答案在我的上下文/用例中对我来说没有任何意义。

因此,假设您处于正常的桌面环境中,并且打开了终端并运行如下命令:

gdbserver localhost:5000 ./myapp
也许您这样做是为了从 VS Code 或其他东西进行调试。无论如何,现在您已经在终端中运行了这个进程,无论您按 Ctrl+C 多少次,该进程都不会消失。怎么摆脱它?

答案:在

新终端中,运行:

gdb -ex 'target extended-remote localhost:5000'
gdb 可能会用一些你不关心的废话来打扰你 - 只需按下 Enter 键,直到看到提示符 

(gdb)

。现在,在此内部 gdb 命令提示符下键入 
monitor exit
。第一个终端窗口中的 
gdbserver
 应立即退出(您不会在第二个终端中得到任何反馈)。

要在第二个终端中退出 gdb,请键入命令

q

。您可能需要这样做几次。或者直接关闭终端。


-2
投票
当你的目标退出时,gdbserver 应该退出。问题是你的目标如何退出:是吗

    什么也不做:只是跌倒
  1. 在main中返回0
  2. main 中的 exit(0)
从我一直在运行的调试会话来看,在第一种情况下,gdbserver 将不会退出。它会永远徘徊,你必须杀死它。在后两种情况下,gdbserver 将退出。

© www.soinside.com 2019 - 2024. All rights reserved.