Skip to content

示教器插件调试方案

在插件开发过程中,调试是一项非常重要且频繁的工作。目前提供基于 Qt Creator 和 GDB 命令行两种调试方案,开发人员可以根据需求选择合适的调试方案完成插件调试。

基于 Qt Creator 的插件开发调试方案的前提条件:

  1. Qt Creator 与 ARCS 安装在同一开发环境下。
  2. 插件已加载至 ARCS 软件中。

基于 GDB 的插件开发调试方案的前提条件:

  1. 插件已加载至 ARCS 软件中。

基于 Qt Creator 的插件开发调试方案

插件输出路径的设置

当安装 ARCS 软件包后,软件将在【root】(或【home】)目录下生成【arcs_ws】文件夹,【arcs_ws】文件夹就是 ARCS 的工作区间。而插件必须加载到 ARCS 的工作目录下才能运行,由此可以在构建可以运行的插件时,将目标属性的输出路径设置在【arcs_ws】文件夹下。

下面以插件 myplugin 为例,在 myplugin 的【CMakeLists.txt】中设置一下内容:

cmake
#设置插件的输出路径
set(PLUGIN_OUTPUT_PATH $ENV{HOME}/arcs_ws/extension)

#构建可以在 aubo_scope 中加载的插件
add_libary(myplugin SHARED
	${_srcs}
	${install_src}
	${program_src}
	)
set_target_properties(myplugin PROPERTIES
	LABELS aubo_caps
	OUTPUT_NAME myplugin
	PREFIX ""
	DEBUG_POSTFIX ""
	LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_PATH}/myplugin
	CXX_VISIBILITY_PRESET hidden
)

注意:

  1. 在生成 myplugin 动态库文件时,所用到的 ${_srcs}${install_src}${program_src} 文件,用户需要按需进行设置。
  2. 在设置生成的 myplugin 属性时,在此只需要关注对于 LIBRARY_OUTPUT_DIRECTORY 目标路径的设置,其他属性可以按需自行设置。

插件工程的编译配置

当 Qt Creator 与 ARCS 安装在同一开发环境下时,更改插件工程的运行配置,使得在编译插件工程时,直接更新【arcs_ws】下该插件的内容并且运行 ARCS 软件方便调试。

下面以插件 myplugin 为例,演示具体配置方法:

  1. 打开 Qt Creator,打开 myplugin 插件工程。

  2. 单击左侧菜单栏中【项目】,单击【项目 > Run】,配如下几项:

    1. Active Project:选择插件工程(myplugin)。
    2. 运行配置:需要增加一种新的运行配置,可点击右侧【Add...】来增加。
    3. EXecutable:将该路径设置为 ARCS 可执行文件的位置。安装 ARCS 时候默认安装在【/opt/arcs】下。

    debug-01

  3. 主要思路:更改插件工程的运行配置,使得在编译插件工程的时候,直接更新arcs_ws下该插件的内容并且运行aubo_scope方便调试。

  4. 具体配置:(这里以myplugin为例)

    • 打开qtcreator,并打开我们的插件工程。

    • 选择左侧菜单栏中项目,点击run。在该界面需要配置以下几个选项:

      Active Project:选择插件工程。

      运行配置:需要增加一种新的运行配置,可点击右侧add来增加。

      EXecutable:将该路径设置为aubo_scope可执行文件的位置。安装arcs时候默认安装在/opt/arcs下。

      debug-01

  5. (建议修改)自定义【Build】路径,一般设置为【build】目录下。

    debug-02

Qt Creator 调试流程

  1. 打开 Qt Creator,打开 myplugin 插件工程。

  2. 单击左侧菜单栏下侧【Debug】,选择配置好的选项,然后直接编译插件工程,即可进行对插件的调试。

    1. 若对该插件配置了多种运行方案,则需要选择刚配置的运行 aubo_scope 的配置(此处的配置重命名为 debug_myplugin)。
  3. 编译插件运行结果如下:

    debug-04

基于 GDB 的插件开发调试方案

设置插件输出路径

与 Qt Creator 调试方案类似,在构建可以运行的插件时,将目标属性的输出路径设置在【arcs_ws】文件夹下,实现在更新插件源码后,自动更新【arcs_ws】文件夹下的插件动态库文件的效果。

下面以插件 myplugin 为例,在 myplugin 的【CMakeLists.txt】中设置一下内容:

cmake
#设置插件的输出路径
set(PLUGIN_OUTPUT_PATH $ENV{HOME}/arcs_ws/extension)

#构建可以在 aubo_scope 中加载的插件
add_libary(myplugin SHARED
	${_srcs}
	${install_src}
	${program_src}
	)
set_target_properties(myplugin PROPERTIES
	LABELS aubo_caps
	OUTPUT_NAME myplugin
	PREFIX ""
	DEBUG_POSTFIX ""
	LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_PATH}/myplugin
	CXX_VISIBILITY_PRESET hidden
)

注意:

  1. 在生成 myplugin 动态库文件时,所用到的 ${_srcs}${install_src}${program_src} 文件,用户需要按需进行设置。
  2. 在设置生成的 myplugin 属性时,在此只需要关注对于 LIBRARY_OUTPUT_DIRECTORY 目标路径的设置,其他属性可以按需自行设置。

GDB 调试流程

  1. 进入插件工程根目录,然后执行以下命令编译插件源码:

    bash
    mkdir -p build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Debug..
    make -j`nproc`

    注意:一定要保留 debug 信息(即:cmake -DCMAKE_BUILD_TYPE=Debug ..),否则启动 ARCS 后,在插件源码中打上断点,将不会进入到插件动态库代码中。

  2. 在 GDB 下启动 ARCS:

    bash
    cd /opt/arcs/0.18.0/bin
    gdb ./aubo_scope

    注意:ARCS 的默认安装路径在【/opt/arcs】下,若同时安装了多个版本的 ARCS,需先选择合适的版本,然后进入其中的【bin】目录,即可以找到【aubo_scope】可执行文件(此处选择的是 0.18.0 版本)。

    如果启动成功会提示:

    gdb
    Reading symbols from ./aubo_scope...done.
  3. 在插件源码中设置断点,调试插件源码。可以直接利用 break命令设置断点进行调试。

下面以插件 myplugin 为例,展示一个简易的调试过程:

  1. 编译 myplugin 源码。

    debug-05

  2. 启动 GDB。

    debug-06

  3. 设置断点,断点位置如下图所示。

    debug-07

  4. 查看断点处源码。可以使用 list 命令可以查看当前堆栈区源码信息,默认显示 10 行。

    debug-08

  5. 查看变量值。可以使用单步调式命令 b 让程序跑到 int a = 100 的位置,使用 p 命令查看 a 的值。

    debug-09