Vscode-cpptools: Soporte oficial para Clang y LLDB en Linux

Creado en 6 may. 2020  ·  13Comentarios  ·  Fuente: microsoft/vscode-cpptools

Actualmente, no se admite LLDB en Linux para VS Code. Claramente no funciona.

Tampoco existe documentación oficial sobre cómo comenzar con Clang en Linux usando vscode-cpptools.

Agregar soporte oficial para Clang / LLDB en Linux sería absolutamente increíble. Extender eso a Windows también sería genial gracias a la naturaleza multiplataforma de LLVM.

Feature Request debugger docs

Comentario más útil

Bien, lo he probado una vez más y lo tengo funcionando en Ubuntu 18.04.

Así es cómo:

  1. Instale los siguientes paquetes a través de apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Cree enlaces suaves para archivos ejecutables para que las cosas funcionen como se espera
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. Construya el ejecutable lldb-mi desde la fuente
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Estos deberían serlo. Y aquí está mi launch.json . Básicamente, solo el predeterminado de clang++ preset y no cambió nada si lo recuerdo correctamente.

{
    // 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 Quizás quieras intentarlo.

Todos 13 comentarios

Sí, sería una especie de combinación de https://code.visualstudio.com/docs/cpp/config-clang-mac (con el cambio de referencias de Mac a Linux) y https://code.visualstudio.com/docs/ cpp / config-linux (con las referencias de gcc cambiadas a clang). El servicio de idioma debería funcionar con clang en Linux, y he usado gdb para depurar programas compilados por clang en Linux, pero no estoy seguro si la depuración de LLDB es compatible con Linux como en Mac ( @WardenGnaw lo sabría).

Hacer que la depuración de LLDB funcione en linux requeriría obtener el ejecutable lldb-mi .

Una vez que tenga eso, deberá modificar la configuración launch.json con:

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

Gracias @ sean-mcmanus.

Hola @WardenGnaw , noté que mencionaste eso en un ticket cerrado más antiguo. Pero nunca logré que eso funcionara en mi máquina.

Encontré el archivo lldb-mi en /usr/bin/ pero no pude hacerlo funcionar cuando lo apunté usando "miDebuggerPath": "usr/bin/lldb-mi" . ¿Algo acerca de no poder encontrar lldb-mi-10 ?

¿Eso te suena?

Dado que Ubuntu 20.04 parece haberse olvidado de empaquetar lldb-mi-10 con lldb , intenté usar "miDebuggerPath": "usr/bin/lldb-mi-9" después de instalar lldb-9 , pero fue en vano.

@WardenGnaw, ¿puedes confirmar si "miDebuggerPath": "usr/bin/lldb-mi-9" funciona para ti? ¿Tiene que ser específicamente "miDebuggerPath": "usr/bin/lldb-mi" para que la depuración funcione?

No tiene que ser específicamente "usr / bin / lldb-mi", solo tiene que apuntar a un depurador válido que use la interfaz mi.

Una forma de probar es ejecutar el binario y ver si responde a -interpreter-exec console "version"

@WardenGnaw , parece que lldb-mi ya no será compatible con Ubuntu:

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

¿Hay alguna solución para esto? Sería muy apreciado si pudiéramos usar lldb con VS Code.

Tal como está, estamos limitados a usar versiones anteriores de lldb con VS Code, y para ser claros, ni siquiera pude hacer que lldb-mi-9 funcione correctamente en Ubuntu 20.04 con VS Code.

Para macOS, creamos LLDB-MI y enviamos nuestra propia copia para la extensión. Sin embargo, usamos lldb.framework de XCode para no tener que preocuparnos por actualizar lldb cada vez que hay una nueva versión.

Una solución alternativa será crear su propia copia y apuntar su configuración de inicio con miDebuggerPath . Investigaré si construir una copia en Linux funciona con un lldb instalado con la extensión.

Actualización: Acabo de obtener una compilación de lldb-mi para Ubuntu 20.04 pero encontré un montón de problemas de tiempo de ejecución.

Esta compilación puede tener que incluir liblldb.so y lldb-server.
Los requisitos en la máquina deberán tener:

  • sonido metálico
  • libpython2.7
  • libncurses5

_Aún investigando_

También encontré una situación similar cuando traté de usar clang en vscode en Linux (Ubuntu 20.04) y me dice que miDebuggerPath es una ruta inválida. Entonces, ¿es realmente un error?

@zbhxlj El grupo llvm ha decidido no enviar lldb-mi partir de llvm-toolchain-10.

Para usar clang y lldb, los usuarios necesitarán construir lldb-mi desde su fuente y apuntar miDebuggerPath al binario lldb-mi construido.

@WardenGnaw puede compilar sin Python y sin maldiciones y ver si cumple con el conjunto mínimo de requisitos.

En cuanto al clang, no creo que sea irrazonable asumir que el clang existe para su uso con LLDB-MI

Bien, lo he probado una vez más y lo tengo funcionando en Ubuntu 18.04.

Así es cómo:

  1. Instale los siguientes paquetes a través de apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Cree enlaces suaves para archivos ejecutables para que las cosas funcionen como se espera
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. Construya el ejecutable lldb-mi desde la fuente
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Estos deberían serlo. Y aquí está mi launch.json . Básicamente, solo el predeterminado de clang++ preset y no cambió nada si lo recuerdo correctamente.

{
    // 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 Quizás quieras intentarlo.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

peterwoods1 picture peterwoods1  ·  3Comentarios

wdc596933938 picture wdc596933938  ·  3Comentarios

jrieken picture jrieken  ·  3Comentarios

arl picture arl  ·  3Comentarios

SkyRiderMike picture SkyRiderMike  ·  3Comentarios