如何使用gdbserver设置Eclipse进行远程C调试?

时间:2010-10-28 00:17:11

标签: c eclipse remote-debugging

我是Eclipse的新手。尝试设置进行远程调试。

这是情况,我正在连接运行Linux的远程机器,我正在运行Windows。

1)我已经为Eclipse安装了所有必需的工具,并且能够连接到Linux机器。

2)远程机器有gdbserver

linux1[1]% gdbserver
Usage:  gdbserver [OPTIONS] COMM PROG [ARGS ...]
        gdbserver [OPTIONS] --attach COMM PID
        gdbserver [OPTIONS] --multi COMM

COMM may either be a tty device (for serial debugging), or
HOST:PORT to listen for a TCP connection.

Options:
  --debug               Enable debugging output.

我是否需要在gdbserver ???

中配置任何内容

3)我还应该在Eclipse中配置什么?用于远程调试?

4)我的GDB版本与远程Machine GDB有什么不同?

3 个答案:

答案 0 :(得分:7)

gdbserver需要更多参数。例如,说gdbserver localhost:1337 yourprogram yourprogramarguments并保持运行。

然后,在Eclipse中,为“C / C ++应用程序”创建新的调试配置。在主选项卡的底部,选择GDB (GSF) Remote System Process Launcher作为启动器。在调试器选项卡上,选择gdbserver Debugger作为调试器。在连接下,将TCP称为连接类型,并将localhost:1337作为地址。启动配置时,您可以通过在控制台中输入命令来控制远程gdb

答案 1 :(得分:6)

CLI健全性检查

在您做任何事之前,请确保:

这个答案假设你可以在开发板上做:

sudo apt-get install gdbserver
gdbserver :1234 path/to/executable

主持人:

aarch64-linux-gnu-gdb \
  -ex "target remote board-hostname:1234" \
  -ex "file path/to/cross/compiled/executable" \
  -ex 'tb main' \
  -ex c

然后逐步调试所有内容。

Eclipse设置

在Ubuntu 16.04主机上测试,Eclipse Oxygen 4.7.0(从网站下载),gdbserver 7.12,aarch64-linux-gnu-gdb 7.6。

我已成功使用以下所有方法:

  • 手册
  • 自动
    • 密码验证
    • public key auth

<强>手册

使用此方法,我们必须在目标上启动gdbserver,然后再在Eclipse上运行调试。

Pro:通过Eclipse配置SSH连接以允许Eclipse运行gdbserver,这是另一个可能的失败点。

Con:每次调试开始时都必须重新启动gdbserver。如果Eclipse理解gdbserver --multi,这可以克服,但我不认为它?

由于其简单性,我建议您首先使用此方法。

打开调试配置,然后创建一个新的“C / C ++远程应用程序”。

在“主要”标签下:

  • 像往常一样选择“名称”,“项目”和“C / C ++应用程序”进行本地调试

  • 在底部启动器中,单击“选择其他”,选中“使用配置特定设置”并选择“GDB(DSF)手动远程调试启动器”

    为什么我们这样做:自动启动器首先通过SSH连接到主板并为您启动gdbserver

    enter image description here

在“调试器”选项卡下:

  • “GDB调试器”:与主机上的CLI使用相同,本例为aarch64-linux-gnu-gdb

  • 子选项卡“连接”:将主机名和端口设置为在CLI上传递给主机(board-hostname1234

    enter image description here

    enter image description here

最后,像在CLI中一样手动启动目标上的gdbserver

gdbserver :1234 path/to/executable

通常从Eclipse启动调试器。

每次终止程序时都必须重新启动gdbserver

使用密码验证自动

这是开发板的最佳方法,它具有固定的公开密码。

它使用SSH和密码连接到目标,并且每次都会自动在目标上启动gdbserver,这非常方便!

目标gdbserver标准输出进入Eclipse“控制台”窗口,这进一步减少了窗口切换。

在Eclipse集中:

使用公钥自动

与密码验证非常相似,只是您必须转到:“连接”,“新建”,然后选择“基于公钥的验证”

优点:

  • 如果你有一个未加密的私钥(不安全,但对于开发人员来说很好),可以克服“安全存储无法保存主密码”。
  • 对于服务器,您可能已经设置了公钥

缺点:

  • 第一次关键设置可能会受到伤害
  • 必须在设备开始时重做密钥设置

所以我更喜欢这种方法用于服务器。

如果您执行以下操作,SSH无需密码即可连接:

在使用此方法之前,请确保您的授权密钥在命令行中运行,即您现在应该能够执行此操作:

ssh user@host

没有输入任何密码。

答案 2 :(得分:2)

针对Eclipse 2019-03的更新

在eclipse 2019中,上述步骤无效,因为Eclipse更改了“ C / C ++远程应用程序”中配置的布局。

@Ciro帖子的更新:

以下步骤适用于我: 在“调试配置”下 在“ C / C ++远程应用程序”下 在“主要”标签下:

  • 选择“连接” ==>“远程主机”。
  • 选择“新建”,“ SSH”(以我为例),然后输入远程目标计算机的配置。
  • 在“ C / C ++应用程序的远程绝对文件路径:”中设置目标/远程设备中应用程序的路径。

在“调试器”标签下:

  • “连接”子标签已删除。
  • 已添加新的子选项卡“ Gdbserver设置”。
  • 配置“ Gdbserver路径:”以指向gdbserver的路径。就我而言,它是“ / usr / bin / gdbserver”
  • 配置端口号

这些是我所做的唯一更改,以便上一个答案可以与我一起使用。