在 NetBeans 中使用远程构建主机时断点如何工作?
How do breakpoints work when using a remote build host in NetBeans?
我的任务是为嵌入式平台设置开发环境。到目前为止,我已经在 NetBeans 中设置了一个远程构建主机,它将所有源文件复制到目标设备,使用设备上的 GNU 工具链本地编译它们(g++
、ld
等.),然后运行已编译的二进制文件并将标准输出转发到 NetBeans 运行 所在的开发机器。
我不明白的是:如果断点仅存在于 NetBeans 中,构建机器上的二进制文件如何知道何时何地 start/stop?构建主机只需要 ssh 访问和 compiling/linking 工具链,但似乎以某种方式与 NetBeans 通信以进行调试。我的一个同事建议它使用 gdbserver
,但我没有在 NetBeans 网站上找到任何关于这个包的文档,而且它没有安装在构建主机上(至少不是来自 apt)。 NetBeans 如何做到这一点?
gdb 运行s 在目标机器上。只有与 gdb 的通信(命令等)通过网络到达您的本地机器。如果需要了解更多信息,请阅读 gdb 文档/
您可以做完全相同的事情 - 只需打开远程终端,运行 gdbserver,启动 gdb,您就完成了:)
GUI IDE 使用(或可以配置为使用)不同的命令行工具链进行编译和调试,通常通过 运行 每个所需的工具链程序作为子进程来执行此操作,并且通过标准流与之交互。本质上,IDE 将使用 gcc
或 gdb
与 运行 在终端 window 中使用的文本界面相同。 IDE 使用源文件中的行知识在 gdb
中配置断点,就像您手动 运行 它一样。
在您的情况下,IDE 配置为对所有这些使用 "remote host",因此工具链不是在本地调用,而是通过与远程计算机的 ssh 会话进行控制建筑和 运行 都发生了。
因为gdb
调试器和目标程序运行在同一台电脑上,所以不需要gdbserver
。
在 gdb
对于目标系统来说太大的情况下,gdbserver
是一个小程序,通常会针对目标进行交叉编译并加载到目标系统上。它作为一个紧凑的小委托,通过串行或网络连接与构建机器上的主 gdb
程序 运行 对话,并执行与处理器、内存和 运行 程序的原始交互代表gdb。
另一种可能性是 gdbserver
角色 由与 gdb
在同一台机器上的帮助程序 运行 持有,它代替命令类似于 JTAG debug adapter
的东西可以在较低级别与目标硬件进行交互。然而,在这种情况下,实现 gdbserver 协议的帮助程序通常不称为 "gdbserver" 而是具有特定于实现的名称,例如 openocd
.
我的任务是为嵌入式平台设置开发环境。到目前为止,我已经在 NetBeans 中设置了一个远程构建主机,它将所有源文件复制到目标设备,使用设备上的 GNU 工具链本地编译它们(g++
、ld
等.),然后运行已编译的二进制文件并将标准输出转发到 NetBeans 运行 所在的开发机器。
我不明白的是:如果断点仅存在于 NetBeans 中,构建机器上的二进制文件如何知道何时何地 start/stop?构建主机只需要 ssh 访问和 compiling/linking 工具链,但似乎以某种方式与 NetBeans 通信以进行调试。我的一个同事建议它使用 gdbserver
,但我没有在 NetBeans 网站上找到任何关于这个包的文档,而且它没有安装在构建主机上(至少不是来自 apt)。 NetBeans 如何做到这一点?
gdb 运行s 在目标机器上。只有与 gdb 的通信(命令等)通过网络到达您的本地机器。如果需要了解更多信息,请阅读 gdb 文档/
您可以做完全相同的事情 - 只需打开远程终端,运行 gdbserver,启动 gdb,您就完成了:)
GUI IDE 使用(或可以配置为使用)不同的命令行工具链进行编译和调试,通常通过 运行 每个所需的工具链程序作为子进程来执行此操作,并且通过标准流与之交互。本质上,IDE 将使用 gcc
或 gdb
与 运行 在终端 window 中使用的文本界面相同。 IDE 使用源文件中的行知识在 gdb
中配置断点,就像您手动 运行 它一样。
在您的情况下,IDE 配置为对所有这些使用 "remote host",因此工具链不是在本地调用,而是通过与远程计算机的 ssh 会话进行控制建筑和 运行 都发生了。
因为gdb
调试器和目标程序运行在同一台电脑上,所以不需要gdbserver
。
在 gdb
对于目标系统来说太大的情况下,gdbserver
是一个小程序,通常会针对目标进行交叉编译并加载到目标系统上。它作为一个紧凑的小委托,通过串行或网络连接与构建机器上的主 gdb
程序 运行 对话,并执行与处理器、内存和 运行 程序的原始交互代表gdb。
另一种可能性是 gdbserver
角色 由与 gdb
在同一台机器上的帮助程序 运行 持有,它代替命令类似于 JTAG debug adapter
的东西可以在较低级别与目标硬件进行交互。然而,在这种情况下,实现 gdbserver 协议的帮助程序通常不称为 "gdbserver" 而是具有特定于实现的名称,例如 openocd
.