首页 > 其他分享 >win10下vscode链接wsl2

win10下vscode链接wsl2

时间:2022-09-25 13:55:27浏览次数:74  
标签:vscode json wsl ++ gdb win10 wsl2

win10下vscode链接wsl2

其实之前一直对vscode有很不好的印象:比如编译正常但标红、json配置文件嘎嘎多难以上手;但是这一回被朋友推荐用它,拎出一个中午专门搞了下,感觉它的代码是真的好看……

一些版本信息:

win10 + wsl2:Ubuntu22.04

一、安装vscode

要在本机(也就是win10)中下载哟

从官网下载后,在安装时要注意勾选上添加到Path,这样能避免后续的配置出错

二、部署win10中的c/c++环境

其实可以不配置这里,直接连接wsl—>请在安装remote wsl插件后直接跳到三)标题

也就是下载插件(经典的插件要装吧),总之用到啥就装啥吧

image-20220925122437403

用于远程连接的插件三件套(其实我们链接wsl的时候只需要用remote wsl就行)

image-20220925122452694

2.1.如果你想在win10中使用g++/gdb

可以参考官网的教程,也可以按照这个视频中的来,总之原理都是在win10中自己下载gcc、g++、gdb三件套,然后把它们的路径添加到系统的环境变量中让vscode可以查找到它们、从而实现在win10中进行编译和调试

这一步只是把环境配置好,如果想要调试还需在vscode中进行json文件的配置;vscode会在每一个项目文件夹中生成launch、task两个json文件(或者再包括c_cpp_properties.json),它们将会说明这个项目中用到的是哪里的gdb(需要你配置路径)、需要使用的接口等

三、在wsl2中进行设置

3.1.检查环境

划重点:要检查你的g++和gdb存在且可用!

存在且可用是指:

  1. 存在:执行whereis g++whereis gdb后,有回显说明其路径

    image-20220925124300047

  2. 可用:随便写一个test.cpp,能正常使用g++编译成功后,使用gdb编译可执行文件时能击中断点(这里应该是一个wsl的bug,接下来我会提到)

    // test.cpp
    #include <iostream>
    int main(){
    	std::cout << "hello world!" << std::endl;
    	return 0;
    }
    

    执行g++ test.cpp -o test -g无回显说明编译正常,用./test执行一下,应该有输出hello world!

    执行gdb test,进入gdb调试

    image-20220925125320058

    先用run跑一下,再b main(于main入口下个断点),后执行start开始调试,注意是否能击中断点

    image-20220925125546743

如果你执行上述功能均无误后,恭喜你~可以直接跳过下面的叙述

好,如果你发现你的执行不能击中断点,出现了这样的报错:Cannot insert breakpoint 1. Cannot access memory at address 0x8001140

那就先解决这个报错把,不然后面的vscode也无法使用坏的gdb进行调试(当你远程到wsl上时,使用的就是wsl中的gdb);我在查的时候发现这是wsl本身的bug,可以参考这里的issue

我通过打补丁的方式解决了它:简单的在wsl2中执行echo -ne '\x90\x90' | sudo dd of=/usr/bin/gdb seek=$((0x335bad)) bs=1 count=2 conv=notrunc

3.2.创建工作目录

在你的项目文件夹里,执行code .;如果运行正常,会直接自动打开vscode且远程连接wsl(在vscode左下角会显示当前的连接)

image-20220925132826093

如果没成功,可能是wsl2的设置未完全,在cmd中执行wsl.exe --set-version Ubuntu-22.04 2

这里的解决请参考:

https://www.cnblogs.com/ls11736/p/16204527.html

https://blog.csdn.net/weixin_49977305/article/details/124893021

四、vscode中json的配置

4.1.c_cpp_properties.json

使用快捷键ctrl+shift+p进行搜索(点查看->命令面板也是一样的),敲c/c++ edit configurations,选择UI版本(简单直观)

image-20220925133306121

这里的编译器路径就写你在wsl里使用whereis g++得到的路径

image-20220925133703663

4.2.launch.json

{
    "configurations": [
        {
            "name": "C/C++: g++ 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件",	// 这里的名字要和task文件中的“label”值相同
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ],
    "version": "2.0.0"
}

4.3.tasks.json

{
    "version": "2.0.0",
    "windows": {
        "options": {
            "shell": {
                "executable": "bash.exe",
                "args": [
                    "-c"
                ]
            }
        }
    },
    "tasks": [
        {
            "label": "g++ build active file",
            "type": "shell",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}"
            ],
            "group": "build"
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ]
}

好了,现在请开始愉快的coding吧~

五、一个报错一个下午

ERROR: Unable to start debugging. Unexpected GDB output from command "-exec-run". Warning: Cannot insert breakpoint 1.

检查wsl中的gdb能否正常工作和vscode中的配置文件,也可能与gdb版本有关

标签:vscode,json,wsl,++,gdb,win10,wsl2
From: https://www.cnblogs.com/bisa/p/16727735.html

相关文章

  • Docker的配置及与vscode的连接(coding代码仓库)
    Docker的配置及相关应用本文是为Docker的配置及应用相关操作。包含(Debian、WSL、Docker、vsCode、git)的安装与配置。且与Coding代码仓库的连接。(附上所有安装包链接:https:......
  • Django 使用VScode 创建工程
    一、VSCode创建Django工程VSCode官方:https://code.visualstudio.com1mysite(项目名),创建Django项目,可以和虚拟环境放在同一目录,也可以放在虚拟环境的文件夹里。......
  • win11 wsl2-ubuntu20.04从C盘迁移到D盘
     核心步骤:1)导出到D盘2)从C盘中注销原始的ubuntu系统3)从D盘中重新导入 wsl--exportUbuntu-20.04d://wslubuntu2004//ubuntu-20.04.tarwsl--unregisterUbuntu......
  • 准备维护 Aegisub 先介绍编译 win10 64 vs2017
    起因是,现在开始做翻译,发现这个软件在WIN上面显示很模糊,没有适配高DPI显示,看了从2014年后,官方就不在发布新版本了,为了自己用着舒服,也为了广大的字幕影视爱好者。所......
  • VSCode插件:嵌套注释
    问题描述有的时候我们需要为多行代码进行注释,但是其中某几行已经注释了,但是如果再这个基础之上再进行注释的话是没法注视成功的安装NestedComments插件DefaultKeybin......
  • 用vscode写C语言调试常见错误及其解决方法
    下载mingw,添加系统变量(可以解决头文件报错问题),下载插件就不说了。新建一个文件夹,命名为.vscode,在这个文件夹下方,添加三个jsion文件(更改代码),配置好后,添加C文件(最好不要同......
  • win10: Windows Audio无法启动 错误 0x80070005:拒绝访问
    进入目录C:\Windows\System32,找到cmd.exe,右键->以管理员身份运行在cmd窗口中输入:netlocalgroupAdministrators/addnetworkservice,回车在cmd窗口中输入:netlocalg......
  • vscode - plug - scss转css
    vscode-plug-scss转css参考资料sass笔记(完结)安装,使用,vscode中设置easysass,嵌套,变量,混合,循环,分支vscode配置easysassEasySass在vscode扩展中分别搜索并安装:Sas......
  • win10不为人知的高效率神器工具 必备的桌面待办工具
    有不少网友在办公的时候,使用的都是win10系统的电脑,不过想要高效率工作,更重要的是使用一款能够辅助办公,督促我们提高工作效率的工具软件。例如很多上班族在办公的时候,都不......
  • 摆脱鼠标系列 - vscode - 页内 Ctrl + F 搜索完 回车下一个,选到后按 Esc退回到编辑状
    为什么这个很基础,但是没有细细整理摆脱鼠标系列-vscode-页内Ctrl+F搜索完回车下一个,选到后按Esc退回到编辑状态之前还找了个快捷键Alt+Enter,发现冲......