我目前无法解决我的应用程序的远程调试问题gdb
。我希望能够附加到远程进程并使用IDE
的视觉调试(我使用Visual Studio Code
)。
问题是IDE可以通过它附加到本地进程,但pid
实际上并没有用。因此,如果我请求本地端口转发,则可以使用本地端口转发连接,但这又并不是我真正想要的。
是否可以执行类似“ pid-forwarding”的操作,即我设置了一些pid
实际上是远程进程的操作。
正如Billy叔叔所说的那样,一个不错的方法是使用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程序,或更典型地,在小型嵌入式系统上运行的程序从更大的开发平台。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句