gpt4 book ai didi

c++ - 使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序

转载 作者:IT老高 更新时间:2023-10-28 22:41:16 28 4
gpt4 key购买 nike

我正在使用 Eclipse(在 Windows 中)使其连接到我的 Linux 机器并远程编译和调试 C++ 代码。

我的工作:

  • 已安装 CDT/RSE/RDT(Eclipse Juno、CDT 8.1.2、PTP(RDT) 6.0.4、RSE 3.4)
  • rdt-server 在 Linux 机器上运行 ( perl ./daemon.pl 4075 )
  • 创建本地 C++ 项目(基于 Makefile)
  • 编译和调试本地 C++ 项目
  • 创建远程项目(使用“Linux”连接到 rdt 服务器)
  • 编译远程项目(基于 Makefile)

  • 我可以做的一些手动操作(没有 Eclipse):
  • “远程”调试我编译的项目:ssh mybox 'cd /path/to/project; gdb main'
  • 启动一个 gdbserver:ssh mybox 'cd /path/to/project; gdbserver fqdn:10000 main'

  • 什么不起作用:在 Eclipse 中调试
  • 通过“C++ 应用程序”调试错误:未指定程序(因为我没有本地代码)
  • 通过“C++ 远程”调试错误:未指定程序(我需要本地代码吗?)
  • 通过“C++ attach”调试(调试器:“gdbserver”)
  • 在 linuxbox 上运行的 gdbserver
  • gdb 无法与 gdbserver 通信(cygwin gdb 7.5,linux gdb/gdbserver 7.3);警告:架构拒绝了目标提供的描述。
  • 通过“C++ attach”(调试器:“gdb”)调试将尝试附加到我的 Windows 进程。

  • 其他可能导致问题的事情:
  • 我正在使用 ssh MSYS/Git 提供的二进制文件(不在 PATH 上)
  • Cygwin 不在 PATH

  • 我真的很想在 Eclipse 中为我的 C++ 项目进行远程调试。
    你有什么建议如何从这里开始吗?

    最佳答案

    使用 CLI 进行健全性检查

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

  • 正确交叉编译应用程序并运行。您不一定需要使用 Eclipse 来执行此操作。
  • 从命令行获取 GDB 远程调试正常工作

  • 这个答案假设你可以在开发板上做:
    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 中测试。

    我已成功使用以下所有方法:
  • 手册
  • 自动
  • 密码认证
  • 公钥认证

  • 手册

    使用这种方法,我们必须在 Eclipse 上运行 debug 之前在目标上启动 gdbserver

    优点:无需通过 Eclipse 配置 SSH 连接以允许 Eclipse

    缺点:每次调试开始时都必须重新启动 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, super 方便!

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

    在 Eclipse 中:
  • 解决了“安全存储无法保存主密码”错误,解释如下:How to solve "Secure storage was unable to save the master password" in Eclipse CDT remote application with SSH password debug connection?
  • 将启动器设置为:“自动远程调试启动器”
  • 设置“远程绝对文件路径
    用于 C/C++ 应用程序”到 /root/path/to/project/path/to/executable
  • “连接”,“新建”,然后选择“基于密码的身份验证”

  • 自动使用公钥

    与密码验证非常相似,不同之处在于您必须转到:“连接”、“新建”,然后选择“基于公钥的验证”

    优点:

    如果您有加密的私钥,
  • 克服了“安全存储无法保存主密码”(不安全,但对于
  • 很好)
  • 对于服务器,您可能已经设置了公钥

  • 缺点:
  • key 设置第一次可能会受伤
  • 必须在开发板被 nuked 时重做 key 设置

  • 如果您符合以下条件,SSH 无需密码即可连接:
  • 在目标上设置 ~/.ssh/authorized_keys 以包含来自主机的 ~/.ssh/id_rsa.pub
  • 在主机上有一个未加密的私钥,它绕过了我们的密码问题
  • 正确设置讨厌的文件夹权限:https://unix.stackexchange.com/questions/36540/why-am-i-still-getting-a-password-prompt-with-ssh-with-public-key-authentication

  • 在使用此方法之前,请确保您的授权 key 可从命令行工作,即您现在应该能够执行以下操作:
    ssh user@host

    无需输入任何密码。

    改变进程的当前工作目录

    How to set the current working directory of the program when remote debugging with gdbserver Automatic Launcher in Eclipse CDT?

    关于c++ - 使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685104/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com