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

St.*_*rio 3 linux networking remote

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

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

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

Ste*_*itt 7

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

\n\n

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

\n\n
gdbserver --attach :9953 ${pid}\n
Run Code Online (Sandbox Code Playgroud)\n\n

将在端口 9953 上列出并附加到给定的进程 ID。您可以指定多种方式连接到服务器(串行端口、IP 地址...),并运行命令进行调试,或附加到正在运行的进程,甚至运行 \xe2\x80\x9c 调试服务器\ xe2\x80\x9d 无具体进程。

\n\n

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

\n\n
$ gdb ...\n\n(gdb) target remote <IP address>:9953\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

当两个主机相同时,它的工作原理与您\xe2\x80\x99d所期望的一样,但它也可以与不同的主机一起工作,例如从Linux系统调试Windows程序,或者更典型的是,在Linux系统上运行的程序来自更大开发平台的小型嵌入式系统。

\n