gdbserver和远程gdb的区别

The difference between gdbserver and remote gdb

gdbserver 和远程 gdb(即通过 SSH)有什么区别? 他们为什么共存? Unix 哲学建议软件应该做好一件事,即调试本地程序。 在我看来,gdb 违反了这一原则,除此之外还做了另一件事——与 gdbserver 交互。

gdbserver 比 GDB 小,依赖性也少,因此在资源受限的系统上可以 运行,GDB 本身不能 运行。或者 GDB 可能由于某些其他原因不能 运行,例如目标平台没有 Python,而您想使用 GDB 的一些 Python 功能。

下一步,但有点相关,目标平台可能与主机平台(GDB 运行s)的架构不同,可能编译 GDB,Python,语法高亮小目标的库等不是你想用你的时间做的事情,相反你可以只编译 gdbserver,然后在你的本地机器上 运行 GDB。

最后,虽然 gdbserver 本身很有用,但它也可以作为测试 GDB 远程串行协议支持的有用机制。该协议记录在 GDB 手册中,它允许 gdbserver 以外的软件与 GDB 交互,例如 OpenOCD 和 QEMU,它们都支持 GDB 的远程协议,这允许 GDB 调试 GDB 和 gdbserver 都不能在其上运行的裸机目标 运行.

您的观察是正确的,这基本上意味着 GDB 有两种调试方法,即本地目标支持和远程目标支持。如果我们想在思想上保持纯粹,那么我们可以(理论上)从 GDB 中删除本机目标支持,并且在所有情况下都只使用 gdbserver,即当您尝试在本地机器上调试程序时,GDB 会自动启动gdbserver,连接到它,并通过该接口进行调试。不过,我不希望很快看到这种变化。