1. 程式人生 > 其它 >VScode 除錯ROS程式

VScode 除錯ROS程式

技術標籤:ROS鐳射雷達

讀Livox_horizon_loam的ROS程式,對ROS採回來的雷達的資料格式和中間的資料轉換理解不透,就將程式匯入VScode,嘗試通過除錯檢視資料的內容和格式的變化。在此記錄一下。

1、安裝好VScode之後,首先下載C/C++,C++ Intellisense, ROS,ROS(deprecated)這幾個外掛。

2、在原工作區間目錄下執行如下命令:

catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1

3、在VScode中匯入該工作區間,就會出現以下四個檔案

其中c_cpp_properties.json自動生成的結果如下,一般不需要修改

{
    "configurations": [
        {
            "browse": {
                "databaseFilename": "",
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "/home/XXX/catkin_horizon/devel/include/**",
                "/opt/ros/kinetic/include/**",
                "/home/XXX/catkin_horizon/src/livox_horizon_loam/include/**",
                "/usr/include/**"
            ],
            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "c++17",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

launch.json生成的檔案如下,利用gdb工具進行除錯,其中“program”改成需要進行除錯、設定斷點的節點的二進位制可執行檔案目錄,我的是在/devel/lib下。

{

    "version": "0.2.0",
    "configurations": [
            {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/devel/lib/loam_horizon/livox_repub",//可執行的二進位制檔案的目錄
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            //"preLaunchTask": "make build"//最好刪了,不然會影響除錯,每次除錯都直接執行make build
        }
    ]
}

settings.json無需修改,task.json修改內容如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make", //代表提示的描述性資訊
            "type": "shell",  //可以選擇shell或者process,如果是shell程式碼是在shell裡面執行一個命令,如果是process代表作為一個程序來執行
            "command": "catkin_make",//這個是我們需要執行的命令
            "args": [],//如果需要在命令後面加一些字尾,可以寫在這裡,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可選always或者silence,代表是否輸出資訊
            },
            "problemMatcher": "$msCompile"
        },
    ]
}

4、之後就可以在節點中“program”中指定的節點中設定斷點,檢視中間變數。注意要在終端先執行roscore。

在檢視中間變數過程中,發現有一部分變數顯示已被優化,不能檢視具體的資料,這個問題需要在CMakeLists.txt中將下面這句中的 -O2改為-O0,意思是在除錯過程在放棄優化,方便檢視中間變數,注意要在除錯完成,程式準備完整正式執行時再修改回去以加快執行速度。

set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -g")