調(diào)試Dynaslam: Ubuntu系統(tǒng)下使用VS Code進(jìn)行自動(dòng)化調(diào)試Dynaslam的教程,包括tasks.json和launch.json的配置
修改CMakeLists.txt文件
- 將
SET(CMAKE_BUILD_TYPE Release)
修改為SET(CMAKE_BUILD_TYPE Debug)
- 不開(kāi)啟編譯優(yōu)化,在編譯選項(xiàng)中包含
-g
參數(shù)來(lái)啟用調(diào)試符號(hào),使調(diào)試器能夠準(zhǔn)確地設(shè)置斷點(diǎn)和跟蹤代碼。
IF(NOT CMAKE_BUILD_TYPE)
# SET(CMAKE_BUILD_TYPE Release)
SET(CMAKE_BUILD_TYPE Debug)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 ")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g")
# -Wall: 這是一個(gè)編譯選項(xiàng),表示開(kāi)啟所有警告信息。-W 表示開(kāi)啟警告,all 表示開(kāi)啟所有警告。
# -O3: 這是另一個(gè)編譯選項(xiàng),表示開(kāi)啟優(yōu)化級(jí)別 3。-O 表示開(kāi)啟優(yōu)化,3 表示優(yōu)化級(jí)別。
修改build.sh文件
將cmake .. -DCMAKE_BUILD_TYPE=Release
替換為cmake -DCMAKE_BUILD_TYPE=Debug ..
echo "Configuring and building DynaSLAM ..."
mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j4
同時(shí),將DynaSLAM/Thirdparty/DBoW2/CMakeLists.txt
和DynaSLAM/Thirdparty/g2o/CMakeLists.txt
中的cmake .. -DCMAKE_BUILD_TYPE=Release
替換為cmake -DCMAKE_BUILD_TYPE=Debug ..
創(chuàng)建 c_cpp_properties.json 文件
組合快捷鍵Ctrl+Shift+P
輸入C/C++: Edit Configurations (JSON)
確定,就會(huì)進(jìn)入一個(gè)新的名為c_cpp_properties.json
的文件編輯狀態(tài),我的內(nèi)容如下:
{
"configurations": [
{
"name": "Linux", // 配置的名稱(chēng),可以根據(jù)需要進(jìn)行更改
"includePath": [
"${default}", // 默認(rèn)的包含路徑,根據(jù)平臺(tái)自動(dòng)設(shè)置
"/usr/include/python2.7", // Python 2.7 頭文件路徑
"${workspaceFolder}", // 工作區(qū)根目錄
"${workspaceFolder}/include", // 自定義的頭文件路徑,根據(jù)實(shí)際情況進(jìn)行修改
"/usr/include/eigen3" // Eigen3 頭文件路徑
],
"defines": [], // 定義的宏,根據(jù)需要進(jìn)行設(shè)置
"compilerPath": "/usr/bin/gcc", // C 編譯器路徑,根據(jù)實(shí)際情況進(jìn)行修改
"cStandard": "c17", // C 語(yǔ)言標(biāo)準(zhǔn)版本,根據(jù)需要進(jìn)行修改
"cppStandard": "gnu++14", // C++ 語(yǔ)言標(biāo)準(zhǔn)版本,根據(jù)需要進(jìn)行修改
"intelliSenseMode": "linux-gcc-x64", // IntelliSense 模式,根據(jù)平臺(tái)和編譯器進(jìn)行設(shè)置
"configurationProvider": "ms-vscode.cmake-tools" // 配置提供程序,用于集成 CMake 工具
}
],
"version": 4 // 配置文件版本號(hào)
}
- ? 這個(gè)配置文件用于為Visual Studio Code的
C/C++擴(kuò)展
提供編譯器
和IntelliSense
功能。通過(guò)指定包含路徑、編譯器路徑、語(yǔ)言標(biāo)準(zhǔn)等信息,它可以幫助編輯器提供準(zhǔn)確的代碼補(bǔ)全、語(yǔ)法檢查等功能。IntelliSense
是一種代碼編輯器的功能,可以提供代碼補(bǔ)全、語(yǔ)法檢查、函數(shù)簽名提示等功能,幫助開(kāi)發(fā)者更高效地編寫(xiě)代碼。 - ? 通過(guò)配置
c_cpp_properties.json
文件,您可以指定編譯器的路徑、包含文件的路徑、宏定義、編譯選項(xiàng)以及語(yǔ)言標(biāo)準(zhǔn)等信息。這些信息將被用于IntelliSense功能,使其能夠正確地解析和分析您的代碼,并提供相應(yīng)的補(bǔ)全和提示。 - ? 例如,您可以在
includePath
字段中指定頭文件的搜索路徑,這樣IntelliSense就能夠正確地找到和解析這些頭文件中的定義。您還可以在defines
字段中添加宏定義,以便IntelliSense可以根據(jù)定義的宏來(lái)提供準(zhǔn)確的代碼補(bǔ)全和語(yǔ)法檢查。 - ? 通過(guò)正確配置
c_cpp_properties.json
文件,您可以提高代碼編寫(xiě)的效率和準(zhǔn)確性,以及獲得更好的開(kāi)發(fā)體驗(yàn)。
創(chuàng)建tasks.json文件
組合快捷鍵Ctrl+Shift+P
輸入Tasks: Configure Default Build Task
,創(chuàng)建一個(gè)新的名為tasks.json
的文件編輯狀態(tài),填入如下內(nèi)容.
{
"version": "2.0.0",
"tasks": [
{
"label": "Build DynaSLAM", // 任務(wù)的標(biāo)簽,用于在其他配置中引用該任務(wù)
"type": "shell", // 任務(wù)類(lèi)型為shell,表示運(yùn)行Shell命令
"command": "sh", // 執(zhí)行的命令為sh,即運(yùn)行Shell腳本
"args": ["build.sh"], // 傳遞給Shell腳本的參數(shù)
"group": { // 任務(wù)組配置
"kind": "build", // 任務(wù)組類(lèi)型為build,用于將任務(wù)標(biāo)記為構(gòu)建任務(wù)
"isDefault": true // 該任務(wù)組為默認(rèn)任務(wù)組
},
"presentation": { // 任務(wù)展示配置
"echo": true, // 在輸出面板顯示任務(wù)執(zhí)行的命令和輸出
"reveal": "always", // 在執(zhí)行任務(wù)時(shí)始終展開(kāi)輸出面板
"focus": false, // 任務(wù)執(zhí)行時(shí)不將焦點(diǎn)切換到輸出面板
"panel": "shared", // 在共享面板中展示任務(wù)輸出
"showReuseMessage": true, // 顯示任務(wù)輸出時(shí)是否顯示任務(wù)已重用的消息
"clear": false // 不在任務(wù)執(zhí)行前清除輸出面板
}
}
]
}
/* 這個(gè)tasks.json文件定義了一個(gè)名為"Build DynaSLAM"的任務(wù),該任務(wù)將運(yùn)行一個(gè)Shell腳本文件build.sh。
任務(wù)被標(biāo)記為構(gòu)建任務(wù),并設(shè)置為默認(rèn)任務(wù)組。在任務(wù)執(zhí)行期間,輸出面板將顯示任務(wù)執(zhí)行的命令和輸出,
輸出面板始終展開(kāi),但不會(huì)將焦點(diǎn)切換到輸出面板。任務(wù)的輸出將顯示在共享面板中,并顯示任務(wù)已重用的消息。
在任務(wù)執(zhí)行之前不會(huì)清除輸出面板上的內(nèi)容。
你可以根據(jù)自己的項(xiàng)目需求調(diào)整和修改這個(gè)tasks.json文件。
確保將任務(wù)的命令和參數(shù)設(shè)置為正確的構(gòu)建命令和參數(shù),以適應(yīng)你的項(xiàng)目。 */
創(chuàng)建Debug用的launch.json文件
組合快捷鍵Ctrl+Shift+D
下拉選擇添加配置...
->選擇C++(GDB/LLDB)
,就會(huì)進(jìn)入一個(gè)新的名為launch.json
的文件編輯狀態(tài),文件如下:請(qǐng)修改為自己的路徑
{
// 使用 IntelliSense 了解相關(guān)屬性。
// 懸停以查看現(xiàn)有屬性的描述。
// 欲了解更多信息,請(qǐng)?jiān)L問(wèn): https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 啟動(dòng)",//"name"屬性指定配置的名稱(chēng)
"type": "cppdbg",//"type"屬性指定調(diào)試類(lèi)型
"request": "launch",//"request"屬性指定調(diào)試請(qǐng)求類(lèi)型(例如啟動(dòng)或附加到進(jìn)程)
// "program": "${workspaceFolder}/src/Yolact_SLAM_SemanticMap/Examples/RGB-D/rgbd_tum",
"program": "/home/cgm/DynaSLAM/Examples/RGB-D/rgbd_tum",//"program"屬性指定要調(diào)試的可執(zhí)行文件路徑
"args": [
"/home/cgm/DynaSLAM/Vocabulary/ORBvoc.txt",
"/home/cgm/DynaSLAM/Examples/RGB-D/TUM3.yaml",
"/home/cgm/DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy",
"/home/cgm/DynaSLAM/Examples/RGB-D/associations/fr3_walking_rpy.txt",
"/home/cgm/DynaSLAM/results/f3_wrpy_mask222",
"/home/cgm/DynaSLAM/results/f3_wrpy_imOut222"
],//"args"屬性指定傳遞給程序的命令行參數(shù)
"stopAtEntry": false,//"stopAtEntry"屬性指定是否在程序入口點(diǎn)停止
// "cwd": "${fileDirname}",
"cwd": "${workspaceFolder}",//"cwd"屬性指定工作目錄
// "environment": [{"name": "PATH", "value": "${env:PATH}:/home/cgm/anaconda3/envs/Yolact/bin"}], //這個(gè)不行,找不到conda環(huán)境
"environment": [{"name": "PATH", "value": "/home/cgm/anaconda3/envs/MASKRCNN/bin:${env:PATH}"}], //"environment"屬性指定要設(shè)置的環(huán)境變量
"externalConsole": false,//"externalConsole"屬性指定是否在外部控制臺(tái)中運(yùn)行程序
"MIMode": "gdb",//"MIMode"屬性指定要使用的調(diào)試器類(lèi)型
// 在launch.json文件中,將preLaunchTask參數(shù)值設(shè)置為我們的任務(wù)標(biāo)簽"Build DynaSLAM",即:
"preLaunchTask": "Build DynaSLAM", // 設(shè)置 preLaunchTask 參數(shù)值
/* preLaunchTask設(shè)置為"Build DynaSLAM"任務(wù)的標(biāo)簽意味著在啟動(dòng)調(diào)試之前會(huì)自動(dòng)運(yùn)行名為"Build DynaSLAM"的任務(wù)。
這個(gè)任務(wù)定義在tasks.json文件中,它負(fù)責(zé)構(gòu)建Dynaslam代碼。
通過(guò)將preLaunchTask與構(gòu)建任務(wù)關(guān)聯(lián)起來(lái),你可以確保在開(kāi)始調(diào)試之前代碼已經(jīng)成功編譯,并且調(diào)試器可以直接開(kāi)始調(diào)試過(guò)程。
因此,通過(guò)在launch.json文件中設(shè)置preLaunchTask屬性并指定對(duì)應(yīng)的任務(wù)標(biāo)簽,
你可以確保在啟動(dòng)調(diào)試會(huì)話(huà)之前先運(yùn)行必要的構(gòu)建任務(wù),以便為調(diào)試過(guò)程做好準(zhǔn)備。這樣可以提高調(diào)試的效率和準(zhǔn)確性。 */
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "將反匯編風(fēng)格設(shè)置為 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]//"setupCommands"屬性指定要在啟動(dòng)調(diào)試器之前發(fā)送的GDB命令。
}
]
}
注意preLaunchTask
,這個(gè)就是ubuntu下使用vscode對(duì)c++程序進(jìn)行自動(dòng)化調(diào)試
的關(guān)鍵設(shè)置
"preLaunchTask": "Build DynaSLAM", // 設(shè)置 preLaunchTask 參數(shù)值
/* preLaunchTask設(shè)置為"Build DynaSLAM"任務(wù)的標(biāo)簽意味著在啟動(dòng)調(diào)試之前會(huì)自動(dòng)運(yùn)行名為"Build DynaSLAM"的任務(wù)。
這個(gè)任務(wù)定義在tasks.json文件中,它負(fù)責(zé)構(gòu)建Dynaslam代碼。
通過(guò)將preLaunchTask與構(gòu)建任務(wù)關(guān)聯(lián)起來(lái),你可以確保在開(kāi)始調(diào)試之前代碼已經(jīng)成功編譯,并且調(diào)試器可以直接開(kāi)始調(diào)試過(guò)程。
因此,通過(guò)在launch.json文件中設(shè)置preLaunchTask屬性并指定對(duì)應(yīng)的任務(wù)標(biāo)簽,
你可以確保在啟動(dòng)調(diào)試會(huì)話(huà)之前先運(yùn)行必要的構(gòu)建任務(wù),以便為調(diào)試過(guò)程做好準(zhǔn)備。這樣可以提高調(diào)試的效率和準(zhǔn)確性。 */
測(cè)試運(yùn)行
- 現(xiàn)在就可以用組合快捷鍵
Ctrl+Shift+B
先編譯項(xiàng)目.
Ctrl+Shift+B
是Visual Studio Code中的快捷鍵,用于執(zhí)行任務(wù)(Tasks)
。通過(guò)使用Ctrl+Shift+B,您可以快速運(yùn)行預(yù)定義的任務(wù),例如構(gòu)建項(xiàng)目、運(yùn)行測(cè)試等。
上述提供的
tasks.json
文件定義了一個(gè)名為"Build DynaSLAM"
的任務(wù),該任務(wù)使用Shell命令運(yùn)行build.sh腳本
。當(dāng)您按下Ctrl+Shift+B
時(shí),Visual Studio Code將執(zhí)行此任務(wù)
,并在輸出面板中顯示任務(wù)的命令和輸出。
通過(guò)使用
Ctrl+Shift+B
執(zhí)行任務(wù),您可以快速構(gòu)建Dynaslam代碼
,而無(wú)需手動(dòng)打開(kāi)終端并輸入命令。這提高了您的開(kāi)發(fā)效率,并使構(gòu)建過(guò)程更加方便。
請(qǐng)注意,您可以根據(jù)需要修改
tasks.json
文件中的任務(wù)配置,以適應(yīng)您的項(xiàng)目需求。確保將命令和參數(shù)設(shè)置為正確的構(gòu)建命令和參數(shù),以確保任務(wù)能夠成功執(zhí)行。
用組合快捷鍵Ctrl+Shift+B
后終端顯示如下信息:
* 正在執(zhí)行任務(wù): sh build.sh
Configuring and building Thirdparty/DBoW2 ...
mkdir: 無(wú)法創(chuàng)建目錄 “build”: 文件已存在
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cgm/DynaSLAM/Thirdparty/DBoW2/build
[100%] Built target DBoW2
Configuring and building Thirdparty/g2o ...
mkdir: 無(wú)法創(chuàng)建目錄 “build”: 文件已存在
-- BUILD TYPE:Debug
-- Compiling on Unix
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cgm/DynaSLAM/Thirdparty/g2o/build
[100%] Built target g2o
Uncompress vocabulary ...
Configuring and building DynaSLAM ...
mkdir: 無(wú)法創(chuàng)建目錄 “build”: 文件已存在
Build type: Debug
-- Using flag -std=c++11.
PROJECT_SOURCE_DIR: /usr/local/opencv2.4.11/share/OpenCV
-- Python library status:
-- executable:
-- version:
-- libraries: /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so
-- library: /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so
-- include path: /usr/include/python3.8
PYTHON LIBS were found!
PYTHON LIBS DIRECTORY: /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so
Boost was found!
Boost Headers DIRECTORY: /usr/include
Boost LIBS DIRECTORY: /usr/lib/x86_64-linux-gnu
Found Libraries: Boost::thread
PROJECT_SOURCE_DIR: /home/cgm/DynaSLAM
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cgm/DynaSLAM/build
[ 92%] Built target DynaSLAM
[100%] Built target rgbd_tum
* 終端將被任務(wù)重用,按任意鍵關(guān)閉。
- 用
F9
在源文件里下斷點(diǎn),F5
運(yùn)行 GDB 調(diào)試.
直接按下F5
鍵會(huì)根據(jù)launch.json文件中的配置啟動(dòng)調(diào)試會(huì)話(huà),并根據(jù)指定的設(shè)置執(zhí)行所需的操作,例如構(gòu)建代碼(ctrl+shift+B
的操作)、設(shè)置環(huán)境變量和啟動(dòng)目標(biāo)程序進(jìn)行調(diào)試。
Vscode調(diào)試時(shí)監(jiān)視Mat數(shù)據(jù)
(float*)(matDepthCurrentFrame.data),10
(float*)(mask.data),10
- 在監(jiān)視窗口中,點(diǎn)擊加號(hào)"+“按鈕或右鍵點(diǎn)擊空白處,選擇"Add Expression”(添加表達(dá)式)。
- 在輸入框中輸入表達(dá)式
(float*)(mask.data),10
,然后按回車(chē)鍵。 - 監(jiān)視窗口將顯示表達(dá)式的值,并且你可以在每次程序停止時(shí)更新該值。
表達(dá)式(float*)(mask.data),10
將強(qiáng)制將mask.data
解釋為float*
類(lèi)型的指針,并獲取該指針的前10個(gè)元素的值
RuntimeError: _ARRAY_API is not PyCObject object
首先我的CMakeLists.txt
文件:
# CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake:$CMAKE_PREFIX_PATH
# export CMAKE_PREFIX_PATH
echo "Configuring and building Thirdparty/DBoW2 ........"
cd Thirdparty/DBoW2
mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j
cd ../../g2o
echo "Configuring and building Thirdparty/g2o .........."
mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j
cd ../../../
echo "Uncompress vocabulary ........."
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..
echo "Configuring and building DynaSLAM ........."
mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j
cd ..
# 調(diào)試時(shí),不要打開(kāi)下面的運(yùn)行命令!?。〔蝗粫?huì)出現(xiàn)錯(cuò)誤RuntimeError: _ARRAY_API is not PyCObject object
# 調(diào)試時(shí),不要打開(kāi)下面的運(yùn)行命令?。。〔蝗粫?huì)出現(xiàn)錯(cuò)誤RuntimeError: _ARRAY_API is not PyCObject object
# 調(diào)試時(shí),不要打開(kāi)下面的運(yùn)行命令!?。〔蝗粫?huì)出現(xiàn)錯(cuò)誤RuntimeError: _ARRAY_API is not PyCObject object
# 調(diào)試時(shí),不要打開(kāi)下面的運(yùn)行命令!?。〔蝗粫?huì)出現(xiàn)錯(cuò)誤RuntimeError: _ARRAY_API is not PyCObject object
#./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_xyz/ Examples/RGB-D/associations/fr3_walking_xyz.txt /home/cgm/DynaSLAM/results/f3_wxyz_mask /home/cgm/DynaSLAM/results/f3_wxyz_imOut
#./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt
#./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_xyz/ Examples/RGB-D/associations/fr3_walking_xyz.txt /home/cgm/DynaSLAM/results/mask
# ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt /home/cgm/DynaSLAM/results/f3_wrpy_mask222 /home/cgm/DynaSLAM/results/f3_wrpy_imOut222
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt /home/cgm/DynaSLAM/results/f3_wrpy_mask222 /home/cgm/DynaSLAM/results/f3_wrpy_imOut222 > run_out.txt 2>&1
# conda activate MASKRCNN
# conda activate maskrcnn
這個(gè)錯(cuò)誤是因?yàn)槲矣袝r(shí)直接./build.sh
運(yùn)行Dynaslam,有時(shí)又是調(diào)試,而調(diào)試的launch.json
已經(jīng)有參數(shù)了,而調(diào)試時(shí)`build.sh``中的命令行參數(shù)沒(méi)有注釋掉!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-454692.html
"program": "/home/cgm/DynaSLAM/Examples/RGB-D/rgbd_tum",//"program"屬性指定要調(diào)試的可執(zhí)行文件路徑
"args": [
"/home/cgm/DynaSLAM/Vocabulary/ORBvoc.txt",
"/home/cgm/DynaSLAM/Examples/RGB-D/TUM3.yaml",
"/home/cgm/DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy",
"/home/cgm/DynaSLAM/Examples/RGB-D/associations/fr3_walking_rpy.txt",
"/home/cgm/DynaSLAM/results/f3_wrpy_mask222",
"/home/cgm/DynaSLAM/results/f3_wrpy_imOut222"
],//"args"屬性指定傳遞給程序的命令行參數(shù)
解決:注釋掉build.sh``的
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml …/DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt /home/cgm/DynaSLAM/results/f3_wrpy_mask222 /home/cgm/DynaSLAM/results/f3_wrpy_imOut222 > run_out.txt 2>&1`
然后再進(jìn)行調(diào)試!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-454692.html
到了這里,關(guān)于調(diào)試Dynaslam: Ubuntu系統(tǒng)下使用VS Code進(jìn)行自動(dòng)化調(diào)試Dynaslam的教程,包括tasks.json和launch.json的配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!