首页 C++工程技巧
文章
取消

C++工程技巧

  1. C++工程的debug方法
  2. C++程序性能分析方法

C++工程Debug方法

常规方法

通过Debug编译,将CMAKE_BUILD_TYPE设置为Debug,关闭编译优化。然而这样做最大的问题是程序运行会很慢,调试不方便。

改进方法

  1. CMAKE_BUILD_TYPE设置为RelWithDebInfo

  2. 将待调试的代码块关闭编译优化:

    1
    2
    3
    4
    5
    6
    
     #pragma GCC push_options
     #pragma GCC optimize("O0")
     {
     // debug code block
     }
     #pragma GCC pop_options
    
  3. VSCode中进行debug配置, launch.json example:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    {
     "version": "0.2.0",
     "configurations": [
         {
             "name": "(gdb) Launch",
             "type": "cppdbg",
             "request": "launch",
             "program": "[C++编译出的可执行exe文件路径]",
             "args": ["程序参数"],
             "stopAtEntry": false,
             "cwd": "${fileDirname}",
             "environment": [],
             "externalConsole": false,
             "MIMode": "gdb",
             "setupCommands": [
                 {
                     "description": "Enable pretty-printing for gdb",
                     "text": "-enable-pretty-printing",
                     "ignoreFailures": true
                 },
                 {
                     "description":  "Set Disassembly Flavor to Intel",
                     "text": "-gdb-set disassembly-flavor intel",
                     "ignoreFailures": true
                 }
             ]
         }
     ]
    }
    
  4. 设置断点、编译、调试。可使用debug console查看局部变量。

C++程序性能分析

gperftools(originally Google Performance Tools)包含了cpu性能分析工具,原理和gprof差不多,会在编译的时候插入为函数计时的代码。

另外gperftools中包含了heap profiling工具,可以对程序的内存占用情况进行分析。使用方法:

  1. 安装gperftools:

    1
    
     sudo apt-get install -y libtool gperf  libgoogle-perftools-dev
    
  2. CmakeLists中添加编译选项

    • 添加-lprofiler用于CPU性能分析
    • 添加-ltcmalloc用于内存分析
  3. 运行程序,会在运行目录下(roslaunch的运行目录是~/.ros)生成cputest.prof以及memtest.x.heap

  4. 使用pprof命令可视化并分析数据

    1
    
     pprof [C++可执行文件路径] ./cpu_test.prof --svg > cpu_map_diff.svg
    
本文由作者按照 CC BY 4.0 进行授权