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

new*_*int 10 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.
Run Code Online (Sandbox Code Playgroud)

我需要在gdbserver???中配置任何东西吗?

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

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

den*_*ane 7

gdbserver需要更多的论据.例如,说gdbserver localhost:1337 yourprogram yourprogramarguments并保持运行.

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


Cir*_*四事件 7

CLI健全性检查

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

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

sudo apt-get install gdbserver
gdbserver :1234 path/to/executable
Run Code Online (Sandbox Code Playgroud)

在主持人:

aarch64-linux-gnu-gdb \
  -ex "target remote board-hostname:1234" \
  -ex "file path/to/cross/compiled/executable" \
  -ex 'tb main' \
  -ex c
Run Code Online (Sandbox Code Playgroud)

然后正确调试一切.

Eclipse设置

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

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

  • 手册
  • 自动
    • 密码验证
    • 公钥认证

手册

使用此方法,我们必须gdbserver在Eclipse上运行调试之前启动目标.

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

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

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

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

在"主要"选项卡下:

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

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

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

    在此输入图像描述

在"Debugger"选项卡下:

  • "GDB调试器":与主机上的CLI使用的相同,aarch64-linux-gnu-gdb对于此示例

  • 子选项卡"连接":设置在CLI上传递给主机的主机名和端口(board-hostname1234)

    在此输入图像描述

    在此输入图像描述

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

gdbserver :1234 path/to/executable
Run Code Online (Sandbox Code Playgroud)

并正常从Eclipse启动调试器.

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

自动使用密码验证

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

它通过SSH和密码连接目标,gdbserver每次都自动启动目标,超级方便!

Target gdbserverstdout进入Eclipse"Console"窗口,这进一步减少了窗口切换.

在Eclipse集中:

使用公钥自动

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

优点:

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

缺点:

  • 键设置可能会在第一时间受到伤害
  • 每当开发板被破坏时,必须重做密钥设置

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

如果您以下情况,SSH可以在没有密码的情

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

ssh user@host
Run Code Online (Sandbox Code Playgroud)

没有输入任何密码.