Vscode-cpptools: Support officiel pour Clang et LLDB sous Linux

Créé le 6 mai 2020  ·  13Commentaires  ·  Source: microsoft/vscode-cpptools

Actuellement, le support LLDB sur Linux pour VS Code fait défaut. Cela ne fonctionne manifestement pas.

Il n'y a pas non plus de documentation officielle sur la façon de démarrer avec Clang sous Linux en utilisant vscode-cpptools.

Ajouter le support officiel de Clang / LLDB sur Linux serait absolument génial. Étendre cela à Windows serait également très bien grâce à la nature multiplateforme de LLVM.

Feature Request debugger docs

Commentaire le plus utile

D'accord, j'ai donc testé à nouveau et je l'ai fait fonctionner sur Ubuntu 18.04.

Voici comment:

  1. Installez les packages suivants via apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Créez des liens souples pour les fichiers exécutables afin que les choses puissent fonctionner comme prévu
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. Construisez l'exécutable lldb-mi partir des sources
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Ce devrait être ça. Et voici mes launch.json . Fondamentalement, juste celui par défaut de clang++ préréglé et n'a rien changé si je m'en souviens correctement.

{
    // 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 Vous voudrez peut-être essayer.

Tous les 13 commentaires

Ouais, ce serait en quelque sorte une combinaison de https://code.visualstudio.com/docs/cpp/config-clang-mac (avec les références Mac changées en Linux) et https://code.visualstudio.com/docs/ cpp / config-linux (avec les références gcc changées en clang). Le service de langage devrait fonctionner avec clang sous Linux, et j'ai utilisé gdb pour déboguer des programmes compilés par clang sous Linux, mais je ne suis pas sûr que le débogage LLDB soit pris en charge sous Linux comme il le serait sur Mac ( @WardenGnaw le saurait).

Pour que le débogage LLDB fonctionne sous Linux, il faudrait obtenir l'exécutable lldb-mi .

Une fois que vous avez cela, vous devrez modifier la configuration launch.json avec:

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

Merci @ sean-mcmanus.

Salut @WardenGnaw , j'ai remarqué que tu avais mentionné cela sur un ancien ticket fermé. Mais je n'ai jamais réussi à faire fonctionner cela sur ma machine.

J'ai trouvé le fichier lldb-mi dans /usr/bin/ mais je n'ai pas pu le faire fonctionner lorsque je le cible en utilisant "miDebuggerPath": "usr/bin/lldb-mi" . Vous ne parvenez pas à trouver lldb-mi-10 ?

Est-ce que sonner une cloche?

Oh je pense que c'est un bug du côté d'Ubuntu https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-10/+bug/1872387

Depuis Ubuntu 20.04 semble avoir oublié de package lldb-mi-10 avec lldb j'ai essayé d'utiliser "miDebuggerPath": "usr/bin/lldb-mi-9" après l'installation de lldb-9 , mais en vain.

@WardenGnaw pouvez-vous confirmer si "miDebuggerPath": "usr/bin/lldb-mi-9" fonctionne pour vous? Doit-il être spécifiquement "miDebuggerPath": "usr/bin/lldb-mi" pour que le débogage fonctionne?

Il ne doit pas être spécifiquement "usr / bin / lldb-mi", il doit juste pointer vers un débogueur valide qui utilise l'interface mi.

Une façon de tester est d'exécuter le binaire et de voir s'il répond à -interpreter-exec console "version"

@WardenGnaw, il ne semble pas que lldb-mi sera plus supporté sur Ubuntu:

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

Y a-t-il des solutions pour cela? Ce serait vraiment apprécié si nous pouvions utiliser lldb avec VS Code.

Dans l'état actuel des choses, nous sommes limités à l'utilisation d'anciennes versions de lldb avec VS Code, et pour être clair, je n'ai même pas été en mesure de faire fonctionner correctement lldb-mi-9 sur Ubuntu 20.04 avec VS Code.

Pour macOS, nous construisons LLDB-MI et livrons notre propre copie pour l'extension. Cependant, nous utilisons le lldb.framework de XCode pour ne pas avoir à nous soucier de la mise à jour de lldb à chaque fois qu'il y a une nouvelle version.

Une solution de contournement sera de créer votre propre copie et de pointer votre configuration de lancement vers elle avec miDebuggerPath . Je vais étudier si la construction d'une copie sur Linux fonctionne avec un lldb installé avec l'extension.

Mise à jour: Je viens de recevoir une compilation de lldb-mi pour Ubuntu 20.04 mais je rencontre un tas de problèmes d'exécution.

Cette version devra peut-être livrer liblldb.so et lldb-server.
Les exigences sur le machile devront avoir:

  • bruit
  • libpython2.7
  • libncurses5

_Enquête toujours_

J'ai également rencontré une situation similaire lorsque j'ai essayé d'utiliser clang dans vscode sous Linux (Ubuntu 20.04) et cela me dit que miDebuggerPath est un chemin invalide. Alors, est-ce vraiment un bug?

@zbhxlj Le groupe llvm a décidé de ne pas expédier lldb-mi partir de llvm-toolchain-10.

Pour utiliser clang et lldb, les utilisateurs devront construire lldb-mi à partir de sa source et pointer miDebuggerPath vers le binaire construit lldb-mi .

@WardenGnaw vous pouvez compiler sans python et sans malédictions et voir si cela répond à l'ensemble minimum d'exigences.

En ce qui concerne clang, je ne pense pas qu'il soit déraisonnable de supposer que clang existe pour une utilisation avec LLDB-MI

D'accord, j'ai donc testé à nouveau et je l'ai fait fonctionner sur Ubuntu 18.04.

Voici comment:

  1. Installez les packages suivants via apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Créez des liens souples pour les fichiers exécutables afin que les choses puissent fonctionner comme prévu
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. Construisez l'exécutable lldb-mi partir des sources
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Ce devrait être ça. Et voici mes launch.json . Fondamentalement, juste celui par défaut de clang++ préréglé et n'a rien changé si je m'en souviens correctement.

{
    // 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 Vous voudrez peut-être essayer.

Cette page vous a été utile?
0 / 5 - 0 notes