Vscode-cpptools: Suporte oficial para Clang e LLDB no Linux

Criado em 6 mai. 2020  ·  13Comentários  ·  Fonte: microsoft/vscode-cpptools

Atualmente não há suporte para LLDB no Linux para VS Code. Simplesmente não funciona.

Também não há documentação oficial sobre como começar a usar o Clang no Linux usando vscode-cpptools.

Adicionar suporte oficial para Clang / LLDB no Linux seria absolutamente incrível. Estender isso para o Windows também seria ótimo, graças à natureza de plataforma cruzada do LLVM.

Feature Request debugger docs

Comentários muito úteis

Ok, então eu testei mais uma vez e estou funcionando no Ubuntu 18.04.

Veja como:

  1. Instale os seguintes pacotes por meio de apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Crie links virtuais para arquivos executáveis ​​para que as coisas funcionem conforme o esperado
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. Crie o executável lldb-mi partir da fonte
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Deve ser isso. E aqui está meu launch.json . Basicamente, apenas o padrão da predefinição clang++ e não alterei nada, se bem me lembro.

{
    // 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 Você pode tentar.

Todos 13 comentários

Sim, seria uma espécie de combinação de https://code.visualstudio.com/docs/cpp/config-clang-mac (com as referências do Mac mudando para Linux) e https://code.visualstudio.com/docs/ cpp / config-linux (com referências gcc alteradas para clang). O serviço de linguagem deve funcionar com clang no Linux, e usei gdb para depurar programas compilados com clang no Linux, mas não tenho certeza se a depuração de LLDB é suportada no Linux como no Mac ( @WardenGnaw saberia).

Fazer a depuração do LLDB funcionar no Linux exigiria a obtenção do executável lldb-mi .

Assim que tiver isso, você precisará modificar a configuração launch.json com:

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

Obrigado @ sean-mcmanus.

Ei @WardenGnaw , percebi que você mencionou isso em um tíquete fechado mais antigo. Mas nunca consegui fazer isso funcionar na minha máquina.

Encontrei lldb-mi arquivo em /usr/bin/ mas não consegui fazê-lo funcionar quando o direcionei usando "miDebuggerPath": "usr/bin/lldb-mi" . Algo sobre não conseguir encontrar lldb-mi-10 ?

Isso soa um sino?

Como o Ubuntu 20.04 parece ter esquecido de empacotar lldb-mi-10 com lldb , tentei usar "miDebuggerPath": "usr/bin/lldb-mi-9" depois de instalar lldb-9 , mas sem sucesso.

@WardenGnaw pode confirmar se "miDebuggerPath": "usr/bin/lldb-mi-9" funciona para você? Tem que ser especificamente "miDebuggerPath": "usr/bin/lldb-mi" para que a depuração funcione?

Não precisa ser especificamente "usr / bin / lldb-mi", apenas precisa apontar para um depurador válido que usa a interface mi.

Uma maneira de testar é rodar o binário e ver se ele responde a -interpreter-exec console "version"

@WardenGnaw , não parece que lldb-mi terá mais suporte no Ubuntu:

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

Existem soluções para isso? Seria muito grato se pudéssemos usar lldb com o VS Code.

Do jeito que está, estamos confinados a usar versões mais antigas do lldb com VS Code e, para ficar claro, não consegui nem mesmo fazer o lldb-mi-9 funcionar corretamente no Ubuntu 20.04 com VS Code.

Para o macOS, criamos o LLDB-MI e enviamos nossa própria cópia para a extensão. No entanto, usamos o lldb.framework do XCode para não precisar se preocupar em atualizar o lldb toda vez que há uma nova versão.

Uma solução alternativa será construir sua própria cópia e apontar sua configuração de inicialização para ela com miDebuggerPath . Vou investigar se a construção de uma cópia no linux funciona com um lldb instalado com a extensão.

Atualização: Acabei de conseguir uma compilação de lldb-mi para o Ubuntu 20.04, mas encontrando vários problemas de tempo de execução.

Esta compilação pode ter que enviar liblldb.so e lldb-server.
Os requisitos do machile devem ter:

  • clang
  • libpython2.7
  • libncurses5

_Ainda investigando_

Eu também encontrei uma situação semelhante quando tentei usar o clang em vscode no Linux (Ubuntu 20.04) e ele me diz que miDebuggerPath é um caminho inválido. Então é realmente um bug?

@zbhxlj O grupo llvm decidiu não enviar lldb-mi começando com llvm-toolchain-10.

Para usar o clang e o lldb, os usuários precisarão criar lldb-mi a partir de sua fonte e apontar miDebuggerPath para o binário lldb-mi construído.

@WardenGnaw você pode compilar sem python e sem maldições e ver se isso atende ao conjunto mínimo de requisitos.

Quanto ao clang, não acho irracional supor que ele exista para uso com o LLDB-MI

Ok, então eu testei mais uma vez e estou funcionando no Ubuntu 18.04.

Veja como:

  1. Instale os seguintes pacotes por meio de apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Crie links virtuais para arquivos executáveis ​​para que as coisas funcionem conforme o esperado
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. Crie o executável lldb-mi partir da fonte
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Deve ser isso. E aqui está meu launch.json . Basicamente, apenas o padrão da predefinição clang++ e não alterei nada, se bem me lembro.

{
    // 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 Você pode tentar.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ecbrodie picture ecbrodie  ·  3Comentários

jrieken picture jrieken  ·  3Comentários

montery8 picture montery8  ·  3Comentários

SkyRiderMike picture SkyRiderMike  ·  3Comentários

DemoCrazer picture DemoCrazer  ·  3Comentários