如何在可执行文件上调用gdbserver而不自动运行程序?

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

我有一个限制,我只在我拥有的一个小 BeagleBone Black 上拥有/想要 gdbserver。基本上,某些进程崩溃了,我想在我的主机上使用 gdb 进行调试。

我希望工作流程如下:

  • 在 beaglebone 上启动服务器
  • 在主机上,指定可执行文件,指定断点,然后运行它(就像我通常使用 gdb 的方式一样)

我该怎么做?

gdb
1个回答
0
投票

你可以在不指定可执行文件的情况下启动gdbserver,只要你以“multi”模式启动,所以

$ gdbserver --multi :54321

54321
替换为您实际想要使用的任何端口。

在 GDB 端,您需要使用

extended-remote
协议进行连接,例如:

(gdb) target extended-remote hostname:54321

再次将

hostname
替换为运行 gdbserver 的主机,并将
54321
替换为用于启动 gdbserver 的端口号。

现在,您需要告诉 gdbserver 要启动哪个可执行文件,这是从 GDB 端完成的:

(gdb) set remote exec-file /path/to/exec

注意,

/path/to/exec
是远程计算机上的路径,而不是本地计算机(运行GDB的地方)上的路径,这可能意味着您需要首先将exec部署到远程。

接下来你需要告诉 GDB 你正在调试哪个可执行文件,这很糟糕,我们需要告诉 GDB 同样的事情两次,但现在就是这样,所以:

(gdb) file /local/path/to/exec

该路径是本地机器上的路径,即运行GDB的路径。 此时,您可以根据需要自由设置断点,就像在本机调试会话中一样。 准备好后,您就可以如您所愿

run

对上面的内容稍作调整是告诉 GDB 它需要从远程计算机获取文件。 你应该能够做到:

(gdb) file target:/path/to/exec

注意

target:
前缀,这告诉 GDB 去远程机器上查找,这里的
/path/to/exec
是远程机器上的路径。 但是,我通常更喜欢自己将文件复制到本地,然后将 GDB 指向本地计算机上的文件。 GDB 从远程计算机进行复制的速度非常慢,并且缓存(我认为)不存在,因此如果您重新启动 GDB 会话,或出于任何原因加载另一个可执行文件,GDB 将重新下载该文件。 但在紧要关头,使用
target:
路径可以帮助解决快速问题。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.