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

2023-12-22

我正在与 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'
  • 启动 gdb 服务器:ssh mybox 'cd /path/to/project; gdbserver fqdn:10000 main'

什么不起作用:在 Eclipse 中调试

  • 通过“C++ 应用程序”调试错误:未指定程序(因为我没有本地代码)
  • 通过“C++ 远程”调试错误:未指定程序(我需要本地代码吗?)
  • debug via "C++ attach" (Debugger: "gdbserver")
    • 运行在 linuxbox 上的 gdbserver
    • gdb 无法与 gdbserver 对话(cygwin gdb 7.5、linux gdb/gdbserver 7.3);警告:体系结构拒绝了目标提供的描述。
  • 通过“C++ Attach”(调试器:“gdb”)进行调试将尝试附加到我的 Windows 进程。

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

  • 我正在使用sshMSYS/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.

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

  • manual
  • automatic
    • 密码验证
    • 公钥授权

Manual

使用这种方法,我们必须启动gdbserver在 Eclipse 上运行调试之前先在目标上执行此操作。

Pro:无需通过 Eclipse 配置 SSH 连接,以允许 Eclipse

Can:你必须重新启动gdbserver每次调试开始时。如果 Eclipse 理解的话,这个问题就可以克服gdbserver --multi,但我不认为是这样?

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

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

在“主要”选项卡下:

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

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

    为什么我们这样做:自动启动器首先使用 SSH 连接到开发板并启动gdbserver为你。

在“调试器”选项卡下:

  • “GDB 调试器”:与主机上的 CLI 使用的相同,aarch64-linux-gnu-gdb对于这个例子

  • 子选项卡“连接”:设置在 CLI 上传递给主机的主机名和端口(board-hostname and 1234)

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

gdbserver :1234 path/to/executable

并从 Eclipse 正常启动调试器。

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

自动使用密码验证

对于具有固定公开密码的开发板来说,这是最好的方法。

它使用 SSH 和密码连接到目标,并启动gdbserver每次都会自动瞄准目标,超级方便!

Target gdbserverstdout 转到 Eclipse“控制台”窗口,这进一步减少了窗口切换。

在 Eclipse 中设置:

  • 解决“安全存储无法保存主密码”错误,如下所述:如何解决使用 SSH 密码调试连接的 Eclipse CDT 远程应用程序中的“安全存储无法保存主密码”? https://stackoverflow.com/questions/45658574/how-to-solve-secure-storage-was-unable-to-save-the-master-password-in-eclipse/45658575#45658575
  • 将启动器设置为:“自动远程调试启动器”
  • 设置“远程绝对文件路径 对于 C/C++ 应用程序”/root/path/to/project/path/to/executable
  • “连接”、“新建”,然后选择“基于密码的身份验证”

使用公钥自动

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

Pros:

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

Cons:

  • 第一次按键设置可能会很麻烦
  • 每当开发板受到攻击时都必须重做密钥设置

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

  • set ~/.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 https://unix.stackexchange.com/questions/36540/why-am-i-still-getting-a-password-prompt-with-ssh-with-public-key-authentication

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

ssh user@host

无需输入任何密码。

更改进程的当前工作目录

Eclipse CDT中使用gdbserver自动启动器远程调试时如何设置程序的当前工作目录? https://stackoverflow.com/questions/45784188/how-to-set-the-current-working-directory-of-the-program-when-remote-debugging-wi

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序 的相关文章

随机推荐

  • PHP中的@是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 php中 符号有什么用 https stackoverflow com questions 1032161 what is the use of symbol in php 我想知道php代码中 的用
  • Phonegap应用程序错误处理,提交日志到服务器

    我正在开发一个 Phonegap 应用程序 所以我想有没有一种好方法可以以某种方式将应用程序崩溃报告 主要是 javascript 的 console logs 提交到服务器 或者我是否必须手动执行此操作并将其记录到文本文件并提交 您可以使
  • 为什么 Gather() 不使用键变量名?

    虽然很丢脸 但我还是无法完全集中注意力tidyr 具体来说gather 我觉得我错过了一些基本的东西 如果我运行这段小代码 library tidyr x lt data frame var1 letters 1 3 var2 LETTER
  • 如何通过 Python/Boto3 添加 DynamoDB 全局二级索引

    是否可以在创建现有 DynamoDB 表后添加全局二级索引 我将 Python 3 x 与 Boto3 一起使用 但无法找到在创建表后将它们添加到表中的任何示例 一般来说 是的 可以添加全局二级索引 GSI 创建表后 然而 更改可能需要很长
  • 在 GAE 项目中的灵活环境模块之间共享代码

    我正在将我的 GAE flex 项目构建为多种服务 my project services service 1 service 1 yaml service 2 service 2 yaml 我现在想在服务之间共享一些代码 理想情况下 我希
  • 如何等待一系列任务并停止等待第一个异常?

    我有一系列任务 我正在等待它们Task WhenAll https learn microsoft com en us dotnet api system threading tasks task whenall 我的任务经常失败 在这种情
  • 在 Ubuntu 中自动安装基于包的 Perl 模块

    我想安装特定 Perl 脚本所需的 Perl 模块 例如perl depends工具 不过 我想在 Ubuntu 中使用apt get 意味着通过包存储库而不是通过 CPAN 安装模块 最相似的问题 例如this one https sta
  • Rails 中的全文 mysql 搜索

    我正在尝试将一个简单的 mysql 全文搜索添加到一个 请不要告诉我安装 solr 或任何其他搜索宝石 我尝试运行它们 这似乎是一个又一个问题 有一天我会抽出时间来做这件事 但那一天不是今天 我需要添加 add index 迁移 但是当我运
  • Visual Studio 2008 Express 无法识别我的 Sql Server 2008 Express

    我最近安装的顺序是 SQL Server 2008 Express 可视化 Web 开发人员速成 2008 当我右键单击 app data 并尝试添加数据库时 它返回 与 SQL Server 文件 mdf 的连接需要 SQL Server
  • 有没有办法在原生 CommonJS 环境中使用 JSX?

    我正在一个具有本机的环境中启动一个新项目CommonJS支持require模块 这是一个atom shell项目 不可能使用预编译步骤 例如在Browserify或webpack AFAIK中 我可以在我的设备上使用 JSXapp jsx在
  • JSON-WSP 或 JSON-RPC [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 Eclipse 与大型工作区结合使用

    我们当前的产品基于 Eclipse RCP 当我们尝试将整个代码库放在一个 Eclipse 工作区中并且我们想知道其他人在做什么时 我们开始遇到问题 这是我们的设置 225 个 eclipse 项目 全部在 trunk project 中
  • 没有 Springboard 的 iOS:由于没有系统事件服务器而终止

    我正在尝试使用 IB 与 Springboard 创建一个简单的 Hello World 应用程序 添加一个按钮及其与操作例程的连接后 我得到以下信息 由于没有系统事件服务器而终止 运行事件泵 或者如果您想运行 请传递参数 Register
  • SSE 浮点运算可以重现吗?

    x87 FPU 因使用内部 80 位精度模式而闻名 这通常会导致跨编译器和机器出现意外且不可重现的结果 在我的搜索中 https stackoverflow com questions 14864238 coercing floating
  • Java - 正则表达式替换美元符号之间的文本

    我正在使用 JAVA 并且想要替换美元符号之间的每个文本实例 例如 1st equation frac 1 mu 1 frac 2 pi lambda x 2nd equation 90 0 3rd equation frac mu t 2
  • 将系统设置为始终使用圆角字体?

    在 SwiftUI 中 有没有办法让系统字体的圆角版本成为所有样式的默认字体 我对应用程序中的所有文本使用一种系统样式 body title headline 等 例如 我可以在单个文本视图上使用它 Text some text font
  • 是什么导致 IE 8 在网站加载时暂停?

    大家好 我想看看你们中是否有人在 Internet Explorer 8 上经历过同样的事情 当我去加载我构建的网站时 我可以看到整个页面已加载 但它之前暂停了大约 8 秒您可以滚动或移动 一旦暂停完成 就可以滚动 但如果您单击不同的页面
  • 从 Swift REPL 中,如何获取可用模块的列表?

    从 Swift REPL 我可以通过以下方式导入 Foundation 等框架模块import Foundation 我可以在 REPL 上发出什么命令来生成可导入的所有模块的列表 附录 只是为了真正清楚我想要理解的内容 在 REPL 上
  • 在升级安装期间删除旧文件版本

    我正在 InstallShield Pro 2010 中使用纯 InstallScript 安装 我们的软件中的第三方 jar 文件已被替换为新版本 运行升级安装时 会安装新的 jar 但旧的 jar 也会保留 糟糕的事情接踵而至 如何让
  • 使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序

    我正在与 Eclipse 在 Windows 中 进行斗争 使其连接到我的 Linux 机器并在那里远程编译和调试 C 代码 我正在做的工作 安装 CDT RSE RDT Eclipse Juno CDT 8 1 2 PTP RDT 6 0