在NetBeans中使用远程构建主机时,断点如何工作?

时间:2017-07-17 17:40:51

标签: c++ netbeans embedded remote-debugging gdbserver

我的任务是为嵌入式平台设置开发环境。到目前为止,我已经在NetBeans中设置了一个远程构建主机,它将所有源文件复制到目标设备,使用设备上的GNU工具链本地编译它们(g++ld等。),然后运行已编译的二进制文件并将stdout转发到运行NetBeans的开发机器上。

我不明白的是:如果断点仅存在于NetBeans中,构建机器上的二进制文件如何知道何时何地启动/停止?构建主机只需要ssh访问和编译/链接工具链,但不知何故似乎与NetBeans进行通信以进行调试。我的一位同事建议它使用gdbserver,但我没有在NetBeans网站上找到有关此软件包的任何文档,并且它没有安装在构建主机上(至少不是来自apt)。 NetBeans是如何做到这一点的?

2 个答案:

答案 0 :(得分:1)

使用(或可以配置使用)不同的命令行工具链进行编译和调试的GUI IDE通常通过将每个所需的工具链程序作为子进程运行并通过标准流与其进行交互来实现。实质上,IDE将使用gccgdb与在终端窗口中运行时使用的相同文本界面。 IDE使用源文件中的行知识在gdb中配置断点,就像在手动运行时一样。

在您的情况下,IDE配置为使用"远程主机"对于所有这些,因此工具链不是在本地调用,而是作为ssh会话控制到远程机器,在远程机器上进行构建和运行。

由于gdb调试器和目标程序在同一台计算机上运行,​​因此不需要gdbserver

如果gdb对于目标​​系统而言太大,gdbserver是一个小程序,通常会为目标进行交叉编译并加载到目标系统上。这可以作为一个紧凑的小代表,通过串行或网络连接与构建机器上运行的主gdb程序进行通信,并代表gdb执行与处理器,内存和运行程序的原始交互。

另一种可能性是gdbserver 角色由与gdb在同一台机器上运行的辅助程序保存,而JTAG debug adapter代替openocd。在较低级别与目标硬件交互。但是,在这种情况下,实现gdbserver协议的帮助程序通常不会被调用&#34; gdbserver&#34;但是具有特定于实现的名称,例如Sub CostPriceMain() Dim SourceWkb As Workbook Dim TargetWkb As Workbook Dim SourceWksht As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False NewFile = Application.GetOpenFilename(FileFilter:="Microsoft Excel Files (*.xlsx; *.xls), (*.xlsx; *.xls), All Files, *.*", FilterIndex:=1) If NewFile = False Then Exit Sub If NewFile <> False Then Set SourceWkb = Workbooks.Open(NewFile) End If Set TargetWkb = Workbooks.Open("C:\WK24.xlsx") ' warning - XLS file could cause problems - see note For Each SourceWksht In SourceWkb.Worksheets If SourceWksht.Visible Then SourceWkb.Sheets("Price List").Range("C:E").Copy TargetWkb.Sheets("Price List").Range("C:E").PasteSpecial Paste:=xlValues End If Next SourceWksht TargetWkb.Close False SourceWkb.Close False Application.ScreenUpdating = True Application.DisplayAlerts = True Done = MsgBox("Task Complete", vbOKOnly) End Sub

答案 1 :(得分:0)

gdb在目标计算机上运行。只有与gdb(命令等)的通信才能通过网络传输到本地计算机。如果需要了解更多/

,请阅读gdb文档

您可以完全相同 - 只需打开远程终端,运行gdbserver,启动gdb即可完成:)