aubo_caps开发过程中,在aubo_scope示教器中调试正在开发的插件是一个非常重要并且频繁的工作。本教程是基于qtcreatorgdb命令行的调试方案,开发者可以根据自己的使用习惯,选择适合自己的调试方案。

基于qtcreator的示教器插件开发调试方案

插件输出路径的设置:

aubo_caps的运行必须加载到aubo_scope的工作目录下,而当我们安装arcs软件包后,会在root(或者home)目录下生成arcs_ws的文件夹,该文件便是aubo_scope的工作区间。,因此,我们可以在构建可以运行的插件时,设置目标属性的输出路径在arcs_ws下。

具体实现如下:(在插件工程的CMakeLists.txt中设置,以示例插件工程myplugin为例)

#设置插件的输出路径
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
)
  • 在该例子中,在生成myplugin动态库文件时,所用到的${_srcs}${install_src}${program_src}文件,大家可以依据自己插件的需求进行设置。

  • 在设置生成的myplugin属性时,本教程大家只需要关注对于LIBRARY_OUTPUT_DIRECTORY目标路径的设置,其他属性可以依据自己插件需求进行设置。

qtcreator中插件工程的编译配置:

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

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

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

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

      Active Project:选择插件工程。

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

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

      img_01

  3. 建议Build、的路径也进行自定义的设置:(一般设置为build目录下)

    • 选择项目->Build->设置构建目录

      img_02

在qtcreator中调试插件的一般流程:

  • 在完成以上配置之后,需要选中刚配置好的选项,然后直接编译插件工程,即可进行对插件的调试。

    • 若对该插件配置了多种运行方案,则需要选择刚配置的运行aubo_scope的配置(此处笔者的配置重命名为debug_myplugin),如图:

      img_03

    • 编译插件运行结果如下:

      img_04

  • 此处需要注意,在第一次加载插件到aubo_scope示教器时,需要为arcs_ws提供插件的zip格式压缩包。

基于gdb的示教器插件开发调试方案

插件输出路径的设置:

aubo_caps的运行必须加载到aubo_scope的工作目录下,而当我们安装arcs软件包后,会在root(或者home)目录下生成arcs_ws的文件夹,该文件便是aubo_scope的工作区间。,因此,我们可以在构建可以运行的插件时,设置目标属性的输出路径在arcs_ws下。

具体实现如下:(在插件工程的CMakeLists.txt中设置,以示例插件工程myplugin为例)

#设置插件的输出路径
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
)
  • 在该例子中,在生成myplugin动态库文件时,所用到的${_srcs}${install_src}${program_src}文件,大家可以依据自己插件的需求进行设置。

  • 在设置生成的myplugin属性时,本教程大家只需要关注对于LIBRARY_OUTPUT_DIRECTORY目标路径的设置,其他属性可以依据自己插件需求进行设置。

  • 这样做的目的是在我们更新插件源码后,自动更新arcs_ws工作目录下的插件动态库文件,而不是像第一次在aubo_scope中加载插件时需要手动在arcs_ws目录下添加插件的zip包。

基于gdb的插件调试流程:

同样,第一次加载插件到aubo_scope,必须将插件打包成zip格式复制到arcs_ws目录下。

  1. 编译插件源码:

    进入插件工程根目录,然后执行以下命令:这里编译一定要注意保留debug信息,不然启动aubo_scope,在插件中打上断点,并不会进入到插件动态库代码中。即:cmake -DCMAKE_BUILD_TYPE=Debug ..

    mkdir -p build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Debug..
    make -j`nproc`
    
  2. gdb下启动aubo_scope

    aubo_scope的默认安装路径在/opt/arcs下,若有多个版本的aubo-scope则需要选择合适的版本,然后进入bin目录即可以找到aubo_scope可执行文件。(此处笔者选择的是0.18.0版本)

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

    若启动成功会提示:

    Reading symbols from ./aubo_scope...done.
    
  3. 设置断点,调试插件源码:(此处断点需设置到插件源码中)

    可以直接利用 break命令设置断点进行调试。

    myplugin插件为例,展示一个及其简易的调试过程:

    • 编译myplugin源码:

      img_05


    • 启动gdb

    img_06


    • 设置断点:(此处断点位置如下图所示)

    img_07


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

    img_08


    • 查看变量值:(使用单步调式命令b 让程序跑到 int a = 100的位置,使用p命令查看a的值)

    img_09

results matching ""

    No results matching ""