zoukankan      html  css  js  c++  java
  • win端 vscode 远程连接 centos,配置调试

    在windows端下载vs code,我下的版本是1.55.2。远端服务器是centos7

    1. 配置SSH登录

     在vs code左侧列图表中,找到Extensions,然后搜索ssh,安装Remote-SSH插件 和 Remote Development插件。安装成功后,会在相同列下方出现Remote Explore图标。点进去,选择配置,再选择当前用户下的 .sshconfig文件。

    一般内容如下:

    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--字体等。网上都有比较丰富的资源。

  • 相关阅读:
    Protobuf for Python测试保存和读取文件
    windows下使用pip安装python的第三方lxml库
    WIN10 CMD 启动虚拟WIFI
    关于 DataGridTextColumn的IsReadOnly
    wpf converter converterparameter 绑定多参数
    wpf 客户端 添加qq客服咨询
    错误信息:内存位置访问无效。 (Exception from HRESULT: 0x800703E6)
    acrgis导出成tiff图片,全是黑色
    webStrom访问只一个很简单的html文件的时候显示local host无法访问。。
    pandas 将excel一列拆分成多列重新保存
  • 原文地址:https://www.cnblogs.com/starRebel/p/14713332.html
Copyright © 2011-2022 走看看