VScode 除錯ROS程式
阿新 • • 發佈:2020-12-16
讀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")