win10下vscode链接wsl2
其实之前一直对vscode有很不好的印象:比如编译正常但标红、json配置文件嘎嘎多难以上手;但是这一回被朋友推荐用它,拎出一个中午专门搞了下,感觉它的代码是真的好看……
一些版本信息:
win10 + wsl2:Ubuntu22.04
一、安装vscode
要在本机(也就是win10)中下载哟
从官网下载后,在安装时要注意勾选上添加到Path,这样能避免后续的配置出错
二、部署win10中的c/c++环境
其实可以不配置这里,直接连接wsl—>请在安装remote wsl
插件后直接跳到三)标题
也就是下载插件(经典的插件要装吧),总之用到啥就装啥吧
用于远程连接的插件三件套(其实我们链接wsl的时候只需要用remote wsl就行)
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存在且可用!
存在且可用是指:
-
存在:执行
whereis g++
和whereis gdb
后,有回显说明其路径 -
可用:随便写一个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调试先用
run
跑一下,再b main
(于main入口下个断点),后执行start
开始调试,注意是否能击中断点
如果你执行上述功能均无误后,恭喜你~可以直接跳过下面的叙述
好,如果你发现你的执行不能击中断点,出现了这样的报错: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左下角会显示当前的连接)
如果没成功,可能是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版本(简单直观)
这里的编译器路径就写你在wsl里使用whereis g++
得到的路径
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