我的任务是为嵌入式平台设置开发环境。到目前为止,我已经在NetBeans中设置了一个远程构建主机,它将所有源文件复制到目标设备,使用设备上的GNU工具链本地编译它们(g++
,ld
等。),然后运行已编译的二进制文件并将stdout转发到运行NetBeans的开发机器上。
我不明白的是:如果断点仅存在于NetBeans中,构建机器上的二进制文件如何知道何时何地启动/停止?构建主机只需要ssh访问和编译/链接工具链,但不知何故似乎与NetBeans进行通信以进行调试。我的一位同事建议它使用gdbserver
,但我没有在NetBeans网站上找到有关此软件包的任何文档,并且它没有安装在构建主机上(至少不是来自apt)。 NetBeans是如何做到这一点的?
答案 0 :(得分:1)
gcc
或gdb
与在终端窗口中运行时使用的相同文本界面。 IDE使用源文件中的行知识在gdb
中配置断点,就像在手动运行时一样。
在您的情况下,IDE配置为使用"远程主机"对于所有这些,因此工具链不是在本地调用,而是作为ssh会话控制到远程机器,在远程机器上进行构建和运行。
由于gdb
调试器和目标程序在同一台计算机上运行,因此不需要gdbserver
。
如果gdb
对于目标系统而言太大,gdbserver
是一个小程序,通常会为目标进行交叉编译并加载到目标系统上。这可以作为一个紧凑的小代表,通过串行或网络连接与构建机器上运行的主gdb
程序进行通信,并代表gdb执行与处理器,内存和运行程序的原始交互。
另一种可能性是gdbserver
角色由与gdb
在同一台机器上运行的辅助程序保存,而JTAG debug adapter
代替openocd
。在较低级别与目标硬件交互。但是,在这种情况下,实现gdbserver协议的帮助程序通常不会被调用" gdbserver"但是具有特定于实现的名称,例如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即可完成:)