使用Eclipse / GDB在Linux实时目标上调试共享库

更新 Jan 16, 2019

适用于

Software

  • LabVIEW Professional
  • LabVIEW Full

Operating System

  • NI Linux Real-Time

Programming Language

  • C
  • C++

其他

软件工具:Eclipse IDE,GDB调试器

问题详述

我使用NI Linux Real-Time(LinuxRT),Eclipse Edition的C&C ++开发工具创建了一个共享库。如何使用Eclipse / GDB在LinuxRT目标上调试共享库?

解决方案

您可以使用两种调试方法来调试共享库。两者都假设您已经构建了将使用NI Linux Real-Time,Eclipse Edition的C / C ++开发工具入门文档中描述的实践部署的共享库。该文档与您安装的NI Linux Real-Time(LinuxRT),Eclipse Edition的C&C ++开发工具一起打包。

您还可以将现有代码导入到NI Linux Real-Time(LinuxRT),Eclipse Edition的C&C ++开发工具中,并使用指定的交叉编译器路径和特定前缀arm-none-linux-gnueabi- ,以实现与在目标上运行的Linux Real-Time操作系统。

要允许Eclipse中的GDB正常工作,必须将/ usr和/ usrlib从目标根文件系统复制到本地主机上的目录<RootFileSystemDir>。在开始之前,请确保您的项目具有可部署的调试配置。

在使用以下调试方法之前,请完成以下步骤以将共享库.so文件传输到目标:
  1. 转到文件菜单栏,然后​​单击窗口»打开透视»其他»远程系统资源管理器
  2. 单击确定
  3. 单击“ 定义与远程系统的连接”按钮以打开“ 新建连接向导”

  4. General文件夹下选择SSH Only
  5. 单击下一步
  6. 父配置文件下拉菜单中选择包含远程系统连接的配置文件
  7. 在“ 主机名”文本框中输入Linux Real-Time目标的主机名或IP地址。
  8. 单击完成
  9. Remote System Explorer窗口中,导航到workspace目录,并在相应项目的Debug文件夹中找到.sofile。
  10. 通过展开目标下的Sftp Files将.so文件复制到目标的/ usr / lib目录并导航到/ usr / lib

    注意:共享库不必放在此目录中。如果放在另一个目录中,则必须向调用库节点提供共享库的完整路径。

在Eclipse中使用GDB的调试方法:
请注意,您需要一个.gbdinit文件来运行调试功能。这将在代码中设置断点。完成以下步骤以创建.gbdinit文件:
  1. 导航到Windows资源管理器中的项目路径。
  2. 右键单击窗口。
  3. 选择新建»文本文档»文件»另存为
  4. 选择“ 所有文件”作为“保存类型”并将其命名为.gdbinit
  5. 选择保存
  6. 在文件中,输入单独的行:
    设置断点等待
    设置sysroot <RootFileSystemDir>
然后,按照调试C / C ++项目中的文档, NI Linux Real-Time,Eclipse Edition的C / C ++开发工具入门中的说明进行操作。这将使您调试共享库。应在“调试配置”菜单中的C / C ++远程应用程序下添加新项目。完成以下步骤以进一步调试共享库:
  1. 导航到“运行” »“ 调试配置”
  2. 在“ 调试配置”窗口中,确保在“ 主”选项卡中选择了项目。
  3. 在同一选项卡中,转到“ 连接”选项并选择目标。
  4. 在同一选项卡中,将C / C ++应用程序远程绝对文件路径更改为指向目标上的共享库。
  5. 在同一选项卡中,单击“应用”按钮旁边的“ 选择其他”
  6. Select Preferred Launcher窗口中,选择Standard Remote Create Process Launcher(如果尚未选择)。
  7. 单击确定
  8. 导航到“ 调试器”选项卡。
  9. 选择Gdbserver设置
  10. 记下xxxx格式的端口号。通常,这将具有默认值2345。
  11. 打开操作系统命令提示符。
  12. 执行命令gdbserver: xxxx --- attach'pidof lvrt'其中xxxx是您的端口号。
  13. 返回Debug Configurations窗口。
  14. 在“ 调试器”选项卡中,单击“ 主”选项卡。
  15. 选择“ 浏览 GDB调试器”选项。
  16. 导航到<National Instruments> \ Eclipse \ toolchain \ gcc-4.4-arm \ i386 \ bin \ arm-none-linux-gnueabi-gdb.exe。
  17. 单击打开
  18. 选择“ 浏览”以获取GDB命令文件。
  19. 导航到当前项目的.gdbinit文件。
  20. 单击打开
  21. 取消选中启动时停止
  22. 选择Apply»Debug
现在应该打开Debug View ,并且在Eclipse的底部,在Console选项卡中,您应该能够调试您的应用程序。在共享库源代码中的断点处暂停执行后,您将可以控制此GDB控制台选项卡。

要停止调试,您需要控制控制台。您可以通过单击标记为Suspend的暂停图标来停止程序。然后,输入命令detach以取消关联项目。

注意:当从目标上运行的VI调用共享库并且执行到达断点时,目标上的lvrt进程将被挂起。这会导致主机失去与目标的连接。一旦调试器不再出现在断点上,就会修复与目标的连接。

使用GDB命令提示符和SSH客户端进行调试:
要使用此方法,您需要一个SSH客户端。完成以下步骤以使用GDB命令提示符和SSH客户端进行调试:
  1. 在本地主机上打开命令提示符。
  2. 通过键入cd C:\ Program Files \ National Instruments \ Eclipse \ toolchain \ gcc-4.4-arm \ i386 \ bin \导航到GDB调试器的位置。
  3. 键入arm-none-linux-gnueabi-gdb.exe以执行调试器。
  4. 输入以下命令:

    设置断点等待
    file C:/ <共享对象的路径> /ExampleLibrary.so
    设置sysroot <RootFileSystemDir>

  5. 在此处输入命令提示符中的任何断点。
  6. 在cRIO上找到一个打开的TCP端口,格式为xxxx ,其中xxxx是目标上的开放端口号。默认值通常为2345。
  7. 打开SSH客户端,然后输入:
    gdbserver: xxxx --attach'pidof lvrt'。
  8. 返回命令提示符并输入:
    目标远程<目标名称>: xxxx
要退出调试过程,请确保GDB不再处于继续模式,并键入detach。

本文是否有帮助?

无帮助