有没有办法附加到远程进程?

有没有办法附加到远程进程?

我目前遇到了我的应用程序的远程调试问题gdb。我希望能够附加到远程进程并使用IDE的可视化调试(我使用Visual Studio Code)。

问题是 IDE 可以通过其附加到本地进程,pid但这并不是很有用。因此,如果我请求本地端口转发,我可以使用本地端口转发连接,这又不是我真正想要的。

是否可以执行“pid-forwarding”之类的操作,即我设置了一些pid实际上是远程进程的操作。

答案1

作为比利叔叔说,做到这一点的一个好方法是使用 GDB 的远程调试功能。这是通过在运行您想要调试的进程的主机上运行一个“小型”调试器,并gdb从运行您的开发环境的主机连接到它来实现的。由于许多 IDE(包括 VS Code)支持使用 进行调试gdb,因此您可以舒适地使用针对在任何地方(包括其他平台)上运行的进程的开发环境。

在运行要调试的进程的主机上,您需要安装gdbserver(通常通过复制静态二进制文件)并运行它;例如:

gdbserver --attach :9953 ${pid}

将在端口 9953 上列出并附加到给定的进程 ID。您可以指定多种方式连接到服务器(串行端口、IP 地址...),并且可以运行命令进行调试,或者附加到正在运行的进程,甚至运行没有特定进程的“调试服务器” 。

在具有开发环境的主机上,您可以连接到以下位置的目标gdb

$ gdb ...

(gdb) target remote <IP address>:9953

其他一切都照常进行。gdb将从远程目标传输所需的文件(库等),但为了加快速度,您可以将其指向文件的本地副本。它将使用本地资源。

当两个主机相同时,这将按您的预期工作,但也可以使其与不同的主机一起工作,例如从 Linux 系统调试 Windows 程序,或者更典型地,从更大的开发平台调试在小型嵌入式系统上运行的程序。

相关内容