win端 vscode 遠程連接 centos,配置調試


在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--字體等。網上都有比較豐富的資源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM