修改或新增 Caffe 网络层时, 需要涉及到 C++ 源码部分 调试工具能够有助于 Caffe 调试、查错等.

环境:

  • Ubuntu14.04
  • Caffe, BVLC 版本
  • Clion2017.2

<h2>1. Clion - Ubuntu 安装</h2>

  • 官网下载 Clion 的 .tar.gz 压缩包 Clion-Linux</p>
  • 解压压缩包到当前文件夹
    tar -zxvf Clion-2017.2.3.tar.gz
    
    </li> <li>运行安装脚本
    cd Clion-2017.2.3
    ./bin/clion.sh
    

    根据提示进行安装,创建快捷方式.</p></li>
    </ul>

    <h2>2. Clion 调试 Caffe C++ 源码</h2>

    • 编译 caffe-master</p>
    • <p>用 Clion 打开编译后的 caffe-master</p>
    • <p>配置参数:
      • 在右上角配置 </p>
      • <p>参考设置: 主要是 Executable, Program arguments 和 Working directory 的配置. Apply 应用配置. </p>
    • <p>设置断点 根据情况,打开需要调试的代码文件,点击相应的代码行左边,设置断点(红色实心圆).</p>
    • <p>开始调试 点击 Clion 右上角配置旁的蜘蛛状绿色图标,开始调试. ​ 快捷键: F5 - 运行到断点 F10 - 单步运行</p>

    <h3>2.1 查看数据</h3>

    <p>gdb print 命令可以显示被调试的语言中任何有效的表达式.

    可以检查各个变量的值:

    (gdb) print p (p为变量名)
    

    对程序中函数的调用:

    (gdb) print find_entry(1,0)
    

    数据结构和其他复杂对象:

    (gdb) print *table_start$8={e=reference=’000’,location=0x0,next=0x0}
    

    值的历史成分:

    (gdb)print $1 ($1为历史记录变量,在以后可以直接引用 $1 的值)
    

    whatis 命令可以显示某个变量的类型:

    (gdb) whatis ptype = int *
    

    <h2>3. 问题解决</h2>

    <h3>3.1 调试出现提示cannot find -lopencv_dep_cudart</h3>

    解决方案

    • 点击 CMake —— 左边的设置(绿色齿轮图标) —— 选CMake Settings:
    • 在 Build, Execution, Deployment 设置下的 CMake 页面的 CMake options 处添加参数 -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF,如下:
    • 设置完成后,reload一下 cmake 项目,即可编译通过.

    <h3>3.2 问题: undefined reference to `cv::applyColorMap(cv::_InputArray const&, cv::_OutputArray const&, int)'</h3>

    解决方案:
    修改 caffe_root/cmake/Dependencies.cmake,添加 contrib:

    # ---[ OpenCV
    if(USE_OPENCV)
      find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs contrib)
      if(NOT OpenCV_FOUND) # if not OpenCV 3.x, then imgcodecs are not found
        find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)
      endif()
    

    <h3>3.3 undefined reference to `H5LTget_dataset_ndims'</h3>

    解决方案:
    修改 caffe_root/cmake/Dependencies.cmake,添加

    # ---[ HDF5
    find_package(HDF5 COMPONENTS HL REQUIRED)
    include_directories(SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR})
    list(APPEND Caffe_LINKER_LIBS ${HDF5_LIBRARIES})
    list(APPEND Caffe_LINKER_LIBS ${HDF5_HL_LIBRARIES}) #added
    

    <h2>参考</h2>

    [1] - clion下调试caffe出现提示cannot find -lopencv_dep_cudart

    [2] - Linux下Caffe如何调试

Last modification:October 9th, 2018 at 09:31 am