IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 使用 WSL 在 VScode上用 LLVM + Clangd + LLDB高效编程 C++ -> 正文阅读

[开发工具]使用 WSL 在 VScode上用 LLVM + Clangd + LLDB高效编程 C++

目的

想要在 VScode 上使用 clang 编译 + LLDB 调试 + clangd 自动补全这一套工具链。
理由是上述工具链是比 gcc+gdb更新的工具链,在各方面都更好,如 clang 比 gcc 报错更友好等。而且 VScode 自带补全很捞,很难用,因此想用 clangd 代替。
可惜 LLDB 在今天(2021年12月)在 Windows 平台上并没有很好的支持,再考虑到很多代码都是 Linux 上跑的,不如直接配一个 Linux 环境,因此使用 WSL(Windows Subsystem for Linux)。

WSL 环境

WSL 安装可以自行百度,还是比较简单的。
在这里使用 WSL 的 Ubuntu 系统,本来想用自己移植的 openEuler 的,但是 openEuler 很多软件比较旧,因此用 Ubuntu。
环境:WSL of Ubuntu
操作系统版本:20.04.3 LTS (Focal Fossa)

安装工具链

当前工具链版本最新为 13,但是 20.04 版本的 Ubuntu 最新为 12,默认为 10。

安装版本 10

sudo apt install clang clangd llvm liblldb-dev 

安装版本 12

我用的是最新 12 版本的,使用 update-alternative 来设置设置默认命令使用 12 版本提供的

sudo apt install clang-12 clangd-12 llvm-12 liblldb-12-dev 

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-12 100
sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-12 100
sudo update-alternatives --install /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-12 100

VScode 插件

必装:

  1. clangd
  2. CodeLLDB

选装:
3. CMake
4. CMake Tools
5. Clang-Format
6. Clang-Tidy
7. Code Runner

配置 VScode

settings.json

按下 Ctrl+Shift+P,输入 setting,找到 WSL 的选项
在这里插入图片描述
粘贴以下配置:

{
    // code runner
    "code-runner.runInTerminal": true,
    "code-runner.saveFileBeforeRun": true, // run code前保存
    "code-runner.clearPreviousOutput": true, // 每次run code前清空属于code runner的终端消息,默认false
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}/build",//指定配置文件compelie_commands.json所在目录,这里有三种方法生成
        // 在后台自动分析文件(基于complie_commands)
        "--background-index",
        // 同时开启的任务数量
        "-j=12",
        // "--folding-ranges"
        // 告诉clangd用那个clang进行编译,路径参考which clang++的路径
        "--query-driver=/usr/bin/clang++",
        // clang-tidy功能
        "--clang-tidy",
        "--clang-tidy-checks=performance-*,bugprone-*",
        // 全局补全(会自动补充头文件)
        "--all-scopes-completion",
        // 更详细的补全内容
        "--completion-style=detailed",
        "--function-arg-placeholders",
        // 补充头文件的形式
        "--header-insertion=iwyu",
        // pch优化的位置
        "--pch-storage=memory",
    ],
}

生成 clangd 配置文件

clangd 对每个项目都需要生成一个名为 compile_commands.json 的配置文件,参见官方文档
一共有以下三种方式

Cmake 项目

在CMakeLists.txt文件中添加set(CMAKE_EXPORT_COMPILECOMMANDS ON)
运行

mkdir -p build
cd build && cmake ..

可以发现在 build目录下已经生成了 compile_commands.json文件

make 或其他项目

sudo apt install bear
bear make

调试

点击运行和调试按钮 -> C++(GDB/LLDB) 会生成默认模板,可以修改如下:

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "lldb", // 配置类型,不同编程语言不同,该项由CodeLLDB插件提供
            "request": "launch", // 可以为launch(启动)或attach(附加) 
            "program": "${fileDirname}/${fileBasenameNoExtension}.out", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${fileDirname}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
            "environment": [], // 环境变量
            "externalConsole": false, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb/lldb手动输命令吧?
            "MIMode": "lldb", // 指定连接的调试器,可以为gdb或lldb,因为使用llvm工具链,所以使用lldb
            "miDebuggerPath": "/usr/bin/lldb", // lldb调试器路径,通过在终端输入 which lldb 命令得到
            "setupCommands": [
                { // 模板自带,好像可以更好地显示STL容器的内容
                    "description": "Enable pretty-printing for lldb", 
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" // 调试前执行的任务,一般为编译程序。与tasks.json的label相对应
        }
    ]
}

tasks.json

按下 Ctrl+Shift+P
输入 tasks,选择 Tasks: Configure task
选择使用模板
选择 Others
粘贴以下作为 tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
            "type": "process", // 可以为process或shell
            "command": "clang++", // 要使用的编译器,C语言用clang
            "args": [
                "${file}",
                "-g", // 生成和调试有关的信息, 如果加上该参数,编译后不仅会生成.out可执行文件,还会生成后缀为.out.dSYM的文件夹,如果不加,调试器会忽略你设的断点
                "-o", // 指定输出文件名,os X和Linux下不加该参数则默认输出a.out,win下默认a.exe
                "${fileDirname}/${fileBasenameNoExtension}.out", // 指定编译生成结果(.out文件和.out.dSYM文件夹)
                "-Wall", // 开启额外警告
                "-std=c++17", // 这里采用c++17标准(推荐),C语言改成"-std=c11"
            ], // 编译的命令,其实相当于VSC帮你在终端中输了这一串东西
            "group": {
                "kind": "build",
                "isDefault": true // 不为true时command shift B快捷键就要手动选择了
            },
            "options": {
                "cwd": "${fileDirname}"
            },
            "presentation": {
                "echo": true,
                "reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档,即使设为never,手动点进去还是可以看到
                "focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            }
        }
    ]
} 

即可使用调试

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:30:19  更:2021-12-15 18:32:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:23:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码