在windows端下載vs code,我下的版本是1.55.2。遠端服務器是centos7
1. 配置SSH登錄
![]()
在vs code左側列圖表中,找到Extensions,然后搜索ssh,安裝Remote-SSH插件 和 Remote Development插件。安裝成功后,會在相同列下方出現Remote Explore圖標。點進去,選擇配置,再選擇當前用戶下的 .ssh\config文件。
一般內容如下:
Host 192.168.66.237 # 名稱 HostName 192.168.66.237 # ip User t1 # 登錄用戶名 IdentityFile ~/.ssh/id_rsa_32 # 私鑰文件,如果沒配置,默認使用 [UserHome]/.ssh/下的私鑰文件(私鑰文件如果不成功,需要檢查文件權限問題。有時候直接從linux復制文件過來可以,但是windous本地創建文件再粘貼內容就不行) Host t2 HostName 172.xx.xx.xx User t2 IdentityFile ~/desktop/id_rsa Port 32333 # 指定端口(如果ssh端口有變)
之后,在Remote Explorer里面,就能直接選擇鏈接登錄。
2. 配置c++
導入了c++項目后,現在開始配置遠程調試(沒有遠程調試的話,遇到segment fault很麻煩)
主要的配置都在”.vscode“文件夾內,創建步驟:
選擇Run->Add Configuration選項,出來

選擇第一個C++(GDB/LLDB)。

然后在這里根據需要的編譯器,選擇相應選項。我的linux端使用的是/usr/local/bin/g++編譯器,所以這里我選擇第一項。
這時候.vscode文件夾內就會出現兩個文件

launch.json負責運行程序,tasks.json負責編譯程序(目前在我的c++程序內是這樣的)。
先看tasks.json,這個文件里面配置了編譯選項,我的文件內容如下:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "worker", "command": "/usr/local/bin/g++", // centos服務器上的g++路徑 "args": [ "-g", // 正常編譯時,編譯項有幾項,這里就列幾行 "-o", "${fileDirname}/test_worker", "${fileDirname}/transfer/src/*.cpp", "${fileDirname}/worker_launcher.cpp", "${fileDirname}/../common/src/*.cpp", "${fileDirname}/local_machine/src/*.cpp", "-I${fileDirname}/./transfer/include/", "-I${fileDirname}/../common/include/rapidjson/", "-I${fileDirname}/../common/include/", "-I${fileDirname}/local_machine/include/", "--std=c++11", "-Wl,-rpath=./lib" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "compiler: /usr/local/bin/g++" }, { // ... 其他project。每個項目一個task } ] }
{fileDirName} 表示在vscode編譯時,停留的文件的文件夾路徑。比如你當前vscode打開的文件絕對路徑是/root/project/main.cpp,那么{fileDirName} 的值就是/root/project/。所以開始運行程序時,停留在哪個文件上是有要求的,要使得加上{fileDirName} 后能正確找到頭文件和目標文件的位置。
其次是launch.json:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal" }, { "name": "task scheduler", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/tesk_worker", //(1) "args": ["-fno-limit-debug-info"], "stopAtEntry": false, "cwd": "${fileDirname}", // (3) "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "worker", // (2) "miDebuggerPath": "/usr/bin/gdb" } ] }
注意點: (1) 可執行文件名為編譯后的tasks.json內配置的編譯目標文件名。
(2)preLaunchTask表示在launch之前要進行的任務,在這里是編譯任務,內容和tasks.json中的label項保持一致。在這里表示預先進行"label":"worker"的編譯項目。
(3)"cwd"代表工作目錄,這里也是設為${fileDirname},確保路徑一致。涉及到路徑的配置都很重要,尤其是需要讀取config文件的時候尤其需要對的上,否則找不到配置文件
之后,一切順利的話,就可以正常調試c++程序了,設置斷點、單步調試。(有的時候突然編譯完了不能正常運行,調試半天也沒用。然后試着重啟一下vs code,結果又好了,不知道為啥)
3.配置提示
配置之前,vscode總是會提示一些莫名的錯誤,基本上都是因為c++版本的問題。
解決方法: F1打開提示窗口

輸入c/c++,然后選Edit Configuration(UI)
然后下拉到最下,C++ standard選擇c++ 11
應該就一切正常了。
調試時需要開啟gdb的pretty-printer功能,否則變量的內容不會顯示,開啟步驟:
mkdir ~/.gdb cd ~/.gdb svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python stlprettyprinter
然后配置~/.gdbinit(沒有則創建),並把如下內容寫進文件:
python import sys sys.path.insert(0, '/home/[user]/.gdb/stlprettyprinter') // [user]--用戶名 from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end
最后,需要在vs code里配置自動開啟,在launch.json的”SetupCommands“加入:
"setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ],
在前面貼出的launch.json內容中也可以看到。之后,就能正常看到變量的值了。
其他一些個性化插件:codel--vscode圖形布局、FiraCode--字體等。網上都有比較豐富的資源。
