我的任务是为嵌入式平台设置开发环境。到目前为止,我已经在 NetBeans 中设置了一个远程构建主机,它将所有源文件复制到目标设备,使用设备上的 GNU 工具链本地编译它们(g++
、ld
等),然后运行编译后的二进制文件并将标准输出转发到运行 NetBeans 的开发机器。
我不明白的是:如果断点仅存在于 NetBeans 中,构建机器上的二进制文件如何知道何时何地开始/停止?构建主机只需要 ssh 访问和编译/链接工具链,但似乎以某种方式与 NetBeans 通信以进行调试。我的一个同事建议它使用 gdbserver
,但我没有在 NetBeans 网站上找到任何关于这个包的文档,而且它没有安装在构建主机上(至少没有安装在 apt 上)。 NetBeans 如何做到这一点?
最佳答案
使用(或可以配置为使用)不同的命令行工具链进行编译和调试的 GUI IDE 通常通过将每个必需的工具链程序作为子进程运行并通过标准流与其交互来实现。本质上,IDE 将使用 gcc
或 gdb
以及在终端窗口中运行它时使用的相同文本界面。 IDE 使用源文件中的行知识在 gdb
中配置断点,就像您手动运行它一样。
在您的情况下,IDE 配置为对所有这些使用“远程主机”,因此工具链不是在本地调用,而是通过作为构建和运行发生的远程机器的 ssh session 来控制。
因为gdb
调试器和目标程序运行在同一台计算机上,所以不需要gdbserver
。
在 gdb
对于目标系统来说太大的情况下,gdbserver
是一个小程序,通常会针对目标进行交叉编译并加载到目标系统上。它作为一个紧凑的小委托(delegate),通过串行或网络连接与构建机器上运行的主 gdb
程序对话,并代表 gdb 执行与处理器、内存和运行程序的原始交互。
另一种可能性是 gdbserver
角色 由与 gdb
在同一台机器上运行的帮助程序担任,该程序命令类似JTAG 调试适配器
在较低级别与目标硬件交互。然而,在这种情况下,实现 gdbserver 协议(protocol)的帮助程序通常不称为“gdbserver”,而是具有特定于实现的名称,例如 openocd
。
关于c++ - 在 NetBeans 中使用远程构建主机时断点如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45150448/