我正在尝试使用 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 ?
下达命令
monitor exit
在终止客户端之前从您的主机 gdb。如果您已经终止它,只需附加另一个即可。
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 中测试。
gdbserver
在目标上运行,而不是在主机上运行。
终止它取决于目标。例如,如果您的目标是 UNIX 类,您可以从目标 shell 远程登录并使用 ps 和kill。
对于任何类型的目标,重新启动都会杀死
gdbserver
。
(如果这不足以回答您的问题,请在问题中包含有关目标的更多信息。)
在Linux上写:
ps -ef |grep gdbserver
现在找到gdbserver进程的pid然后
kill -9 <pid>
这是一个脚本,我用它通过 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"
因此,假设您处于正常的桌面环境中,并且打开了终端并运行如下命令:
gdbserver localhost:5000 ./myapp
也许您这样做是为了从 VS Code 或其他东西进行调试。无论如何,现在您已经在终端中运行了这个进程,无论您按 Ctrl+C 多少次,该进程都不会消失。怎么摆脱它?答案:在
新终端中,运行:
gdb -ex 'target extended-remote localhost:5000'
gdb 可能会用一些你不关心的废话来打扰你 - 只需按下 Enter 键,直到看到提示符 (gdb)
。现在,在此内部 gdb 命令提示符下键入
monitor exit
。第一个终端窗口中的
gdbserver
应立即退出(您不会在第二个终端中得到任何反馈)。要在第二个终端中退出 gdb,请键入命令
q
。您可能需要这样做几次。或者直接关闭终端。