【问题标题】:Remote debugging C++ applications with Eclipse CDT/RSE/RDT使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序
【发布时间】:2013-03-19 02:00:38
【问题描述】:

我正在与 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-server)
  • 编译远程项目(基于 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”)
    • gdbserver 在 linuxbox 上运行
    • gdb 无法与 gdbserver 通信(cygwin gdb 7.5,linux gdb/gdbserver 7.3); 警告:架构拒绝了目标提供的描述。
  • 通过“C++ attach”调试(调试器:“gdb”)将尝试附加到我的 Windows 进程。

其他可能导致问题的事情:

  • 我正在使用 MSYS/Git 提供的 ssh 二进制文件(不在 PATH 上)
  • Cygwin 不在PATH

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

【问题讨论】:

    标签: c++ eclipse gdb remote-debugging eclipse-cdt


    【解决方案1】:

    使用 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 中测试。

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

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

    手动

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

    Pro:无需通过 Eclipse 配置 SSH 连接,让 Eclipse 能够

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

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

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

    在“主要”标签下:

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

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

      我们这样做的原因:自动启动器首先通过 SSH 连接到开发板并为您启动 gdbserver

    在“调试器”选项卡下:

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

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

    最后,就像我们在 CLI 中所做的那样,在目标上手动启动 gdbserver

    gdbserver :1234 path/to/executable
    

    并从 Eclipse 正常启动调试器。

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

    密码验证自动

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

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

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

    在 Eclipse 集合中:

    使用公钥自动

    与密码认证非常相似,不同之处在于你必须去:“连接”,“新建”,并选择“基于公钥的认证”

    优点:

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

    缺点:

    • 第一次按键设置可能会受伤
    • 无论何时开发板都必须重做密钥设置

    如果您满足以下条件,SSH 无需密码即可连接:

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

    ssh user@host
    

    无需输入任何密码。

    更改进程的当前工作目录

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

    【讨论】:

      【解决方案2】:

      “通过“C++ 远程”调试错误:未指定程序(我需要本地代码吗?)”

      是的,因为符号是从本地代码副本加载的。

      在此类启动配置的调试器选项卡中,您将找到远程服务器和端口的设置。使用您在启动 gdbserver 时指定的机器名称和端口。

      AFAIK 这仍然不起作用,因为在本地 Windows 机器上运行的 gdb 将不支持调试 linux 程序。您将需要 gdb 的交叉构建(使用 host=mingw-or-something 和 target=linux 配置和构建)。

      【讨论】:

      • 好吧,我也认为,交叉构建太复杂了。我正在尝试采用纯粹的远程方式,因为我不想在 Windows 机器上构建任何东西,这会导致更多问题(并且在我的公司笔记本电脑上需要更大的软件)
      【解决方案3】:

      很遗憾,这个问题还没有得到想要的解决方案。不过,您可能对我实际上是如何“解决”这个问题感兴趣:

      我们现在直接在 Linux 机器上进行开发,远程完成所有工作。我们在 Linux 机器上设置桌面用户并通过 VNC 登录以运行 Eclipse 并将其用作gdb 的前端。虽然 VNC 不是最好的解决方案(也许我们稍后会尝试 NX),但这个解决方案让我们摆脱了 gdbserver 或 RSE/RDT 的任何问题。

      【讨论】:

        【解决方案4】:

        截至目前(Luna M6),Eclipse CDT+RDT+RSE 似乎是一条链,当您需要时缺少一些链接:

        • 在桌面 PC 上运行 IDE
        • 使用目标系统上的远程工具链来构建而不是安装本地交叉工具链
        • 只需单击一下即可在远程系统上执行自动化调试和运行(启动 gdbserver,附加到它,并提供控制台输出)

        这些要求在当今大量 Linux ARM 板(如 Raspberry Pi 和 OLinuxino)中非常普遍。这些板通常有足够的资源来运行工具链,但不足以提供远程桌面环境来远程运行 IDE。

        我的最终解决方案: 经过几天的努力,我终于为NetBeans C/C++ Remote Development Environment放弃了Eclipse CDT+RDT+RSE,这对我来说就像一个魅力。

        【讨论】:

          【解决方案5】:

          您可以尝试this plugin 与 Eclipse,并行应用程序版本 here is a link

          在从Windows机器开发到Linux上编程时效果很好

          【讨论】:

            猜你喜欢
            • 2013-12-23
            • 2010-12-27
            • 1970-01-01
            • 2020-11-24
            • 2013-06-18
            • 2014-07-25
            • 2012-10-08
            • 2013-10-29
            • 2011-09-18
            相关资源
            最近更新 更多