Vscode-cpptools: 在Linux上对Clang和LLDB的官方支持

创建于 2020-05-06  ·  13评论  ·  资料来源: microsoft/vscode-cpptools

当前,在Linux上缺少针对VS Code的LLDB支持。 显然是行不通的。

也没有官方文档说明如何使用vscode-cpptools在Linux上开始使用Clang。

在Linux上添加对Clang / LLDB的官方支持绝对是一件很棒的事。 多亏了LLVM的跨平台特性,将其扩展到Windows也将很棒。

Feature Request debugger docs

最有用的评论

好的,所以我再次进行了测试,可以在Ubuntu 18.04上运行。

这是如何做:

  1. 通过apt安装以下软件包
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. 为可执行文件创建软链接,以便一切正常
sudo ln -s /usr/bin/clang-10 /usr/bin/clang
sudo ln -s /usr/bin/clang++-10 /usr/bin/clang++
sudo ln -s /usr/bin/lldb-10 /usr/bin/lldb
# This one is a bit strange but VSCode only looks for the name `lldb-server-10.0.0` but not `lldb-server-10`
sudo ln -s /usr/bin/lldb-server-10 /usr/bin/lldb-server-10.0.0
  1. 从源代码构建lldb-mi可执行文件
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

这些应该是它。 这是我的launch.json 。 基本上只是clang++预设中的默认值,如果我没记错的话什么也没改变。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "clang++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: clang++ build active file",
            "miDebuggerPath": "/usr/bin/lldb-mi"
        }
    ]
}

@WardenGnaw您可能想尝试一下。

所有13条评论

是的,它就像是https://code.visualstudio.com/docs/cpp/config-clang-mac(Mac参考更改为Linux)和https://code.visualstudio.com/docs/ cpp / config-linux (将gcc引用更改为clang)。 语言服务应该在Linux上可以与clang一起使用,并且我已经使用gdb在Linux上调试了用clang编译的程序,但是我不确定Linux是否像在Mac上一样支持LLDB调试( @WardenGnaw会知道)。

要使LLDB调试在Linux上工作,将需要获取lldb-mi可执行文件。

一旦有了,就需要使用以下命令修改launch.json配置:

{
...
"miDebuggerPath": "path/to/lldb-mi".
"miMode": ''lldb"
}

谢谢@ sean-mcmanus。

@WardenGnaw ,我注意到您在一张较旧的封闭票中提到了这一点。 但是我从来没有设法在我的机器上完成这项工作。

我在/usr/bin/找到lldb-mi文件,但是当我使用"miDebuggerPath": "usr/bin/lldb-mi"定位它时却无法使它工作。 关于找不到lldb-mi-10

那会响吗?

由于Ubuntu 20.04似乎忘记了将lldb-mi-10lldb打包,因此我在安装lldb-9之后尝试使用"miDebuggerPath": "usr/bin/lldb-mi-9" lldb-9 ,但无济于事。

@WardenGnaw您可以确认"miDebuggerPath": "usr/bin/lldb-mi-9"是否适合您吗? 为了进行调试,是否必须特别指定"miDebuggerPath": "usr/bin/lldb-mi"

它不必专门为“ usr / bin / lldb-mi”,而只需指向使用mi接口的有效调试器即可。

一种测试方法是运行二进制文件,然后查看二进制文件是否响应-interpreter-exec console "version"

@WardenGnaw ,看起来在Ubuntu上不再支持lldb-mi了:

https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-10/+bug/1872387

有什么解决方案吗? 如果我们可以将lldb与VS Code一起使用,将不胜感激。

从目前的情况来看,我们仅限于将lldb的旧版本与VS Code一起使用,并且要明确地说,我什至无法使lldb-mi-9在带有VS Code的Ubuntu 20.04上正常工作。

对于macOS,我们构建LLDB-MI并为扩展名提供我们自己的副本。 但是,我们使用XCode中的lldb.framework不必担心每次有新版本时都会更新lldb。

一种解决方法是构建自己的副本,并使用miDebuggerPath将启动配置指向该副本。 我将研究在Linux上构建副本是否与已安装的扩展名为lldb的作品一起使用。

更新:我刚刚得到了为Ubuntu 20.04构建lldb-mi的构建,但是遇到了很多运行时问题。

此版本可能必须交付liblldb.so和lldb-server。
对机器的要求将必须具有:

  • libpython2.7
  • libncurses5

_仍在调查中_

当我尝试在Linux上的vscode中使用clang时,我也遇到了类似的情况(Ubuntu 20.04),它告诉我miDebuggerPath是无效路径。 那实际上是一个错误吗?

@zbhxlj llvm组已决定不从llvm-toolchain-10开始lldb-mi

为了使用clang和lldb,用户将需要从其源代码构建lldb-mi ,并将miDebuggerPath指向已构建的lldb-mi二进制文件。

@WardenGnaw,您可以在没有python且没有curses的情况下进行编译,并查看其是否满足最低要求。

至于clang,我认为假设存在用于LLDB-MI的clang并没有道理

好的,所以我再次进行了测试,可以在Ubuntu 18.04上运行。

这是如何做:

  1. 通过apt安装以下软件包
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. 为可执行文件创建软链接,以便一切正常
sudo ln -s /usr/bin/clang-10 /usr/bin/clang
sudo ln -s /usr/bin/clang++-10 /usr/bin/clang++
sudo ln -s /usr/bin/lldb-10 /usr/bin/lldb
# This one is a bit strange but VSCode only looks for the name `lldb-server-10.0.0` but not `lldb-server-10`
sudo ln -s /usr/bin/lldb-server-10 /usr/bin/lldb-server-10.0.0
  1. 从源代码构建lldb-mi可执行文件
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

这些应该是它。 这是我的launch.json 。 基本上只是clang++预设中的默认值,如果我没记错的话什么也没改变。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "clang++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: clang++ build active file",
            "miDebuggerPath": "/usr/bin/lldb-mi"
        }
    ]
}

@WardenGnaw您可能想尝试一下。

此页面是否有帮助?
0 / 5 - 0 等级