Vscode-cpptools: Offizielle Unterstützung für Clang und LLDB unter Linux

Erstellt am 6. Mai 2020  ·  13Kommentare  ·  Quelle: microsoft/vscode-cpptools

Derzeit fehlt die LLDB-Unterstützung unter Linux für VS Code. Es funktioniert einfach nicht.

Es gibt auch keine offizielle Dokumentation darüber, wie Sie mit Clang unter Linux mit den vscode-cpptools beginnen können.

Das Hinzufügen von offizieller Unterstützung für Clang / LLDB unter Linux wäre absolut fantastisch. Dank der plattformübergreifenden Natur von LLVM wäre es auch großartig, dies auf Windows auszudehnen.

Feature Request debugger docs

Hilfreichster Kommentar

Okay, ich habe es noch einmal getestet und es funktioniert unter Ubuntu 18.04.

Hier ist wie:

  1. Installieren Sie die folgenden Pakete über apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Erstellen Sie Softlinks für ausführbare Dateien, damit die Dinge wie erwartet funktionieren können
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. Erstellen Sie die ausführbare Datei lldb-mi aus dem Quellcode
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Das sollte es sein. Und hier ist mein launch.json . Grundsätzlich nur die Standardeinstellung aus clang++ voreingestellt und nichts geändert, wenn ich mich richtig erinnere.

{
    // 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 Vielleicht möchten Sie es versuchen.

Alle 13 Kommentare

Ja, es wäre eine Art Kombination aus https://code.visualstudio.com/docs/cpp/config-clang-mac (mit Mac-Referenzen ändern sich zu Linux) und https://code.visualstudio.com/docs/ cpp / config-linux (mit gcc-Referenzen in clang geändert). Der Sprachdienst sollte unter Linux mit clang funktionieren, und ich habe gdb zum Debuggen von clang-kompilierten Programmen unter Linux verwendet, bin mir jedoch nicht sicher, ob das LLDB-Debugging unter Linux wie unter Mac unterstützt wird ( @WardenGnaw würde es wissen).

Damit das LLDB-Debugging unter Linux funktioniert, muss die ausführbare Datei lldb-mi abgerufen werden.

Sobald Sie das haben, müssen Sie die launch.json -Konfiguration ändern mit:

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

Danke @ sean-mcmanus.

Hey @WardenGnaw , ich habe bemerkt, dass du das auf einem älteren geschlossenen Ticket erwähnt hast. Aber ich habe es nie geschafft, dass das auf meiner Maschine funktioniert.

Ich habe die Datei lldb-mi in /usr/bin/ , konnte sie jedoch nicht zum Laufen bringen, wenn ich sie mit "miDebuggerPath": "usr/bin/lldb-mi" als Ziel ausgewählt habe. Etwas darüber, dass Sie lldb-mi-10 ?

Läutet das eine Glocke?

Oh, ich denke, es ist ein Fehler auf Ubuntus Seite https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-10/+bug/1872387

Da Ubuntu 20.04 anscheinend vergessen hat, lldb-mi-10 mit lldb zu verpacken, habe ich versucht, "miDebuggerPath": "usr/bin/lldb-mi-9" nach der Installation von lldb-9 , aber ohne Erfolg.

@WardenGnaw können Sie bestätigen, ob "miDebuggerPath": "usr/bin/lldb-mi-9" für Sie funktioniert? Muss es speziell "miDebuggerPath": "usr/bin/lldb-mi" , damit das Debuggen funktioniert?

Es muss nicht speziell "usr / bin / lldb-mi" sein, sondern nur auf einen gültigen Debugger verweisen, der die mi-Schnittstelle verwendet.

Eine Möglichkeit zum Testen besteht darin, die Binärdatei auszuführen und festzustellen, ob sie auf -interpreter-exec console "version" reagiert

@WardenGnaw es sieht nicht so aus, als würde lldb-mi unter Ubuntu nicht mehr unterstützt werden:

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

Gibt es dafür Lösungen? Es wäre sehr dankbar, wenn wir lldb mit VS Code verwenden könnten.

Derzeit beschränken wir uns darauf, ältere Versionen von lldb mit VS-Code zu verwenden, und um klar zu sein, konnte ich lldb-mi-9 nicht einmal dazu bringen, unter Ubuntu 20.04 mit VS-Code ordnungsgemäß zu funktionieren.

Für macOS erstellen wir

Eine Problemumgehung besteht darin, eine eigene Kopie zu erstellen und Ihre Startkonfiguration mit miDebuggerPath verweisen. Ich werde untersuchen, ob das Erstellen einer Kopie unter Linux mit einer installierten lldb mit der Erweiterung funktioniert.

Update: Ich habe gerade einen Build von lldb-mi für Ubuntu 20.04 bekommen, bin aber auf eine Reihe von Laufzeitproblemen gestoßen.

Dieser Build muss möglicherweise liblldb.so und lldb-server liefern.
Anforderungen an die Maschine müssen haben:

  • klirren
  • libpython2.7
  • libncurses5

Noch untersuchen

Ich habe auch eine ähnliche Situation erlebt, als ich versucht habe, clang in vscode unter Linux (Ubuntu 20.04) zu verwenden. Und es sagt mir, dass miDebuggerPath ein ungültiger Pfad ist. Also ist es tatsächlich ein Fehler?

@zbhxlj Die llvm-Gruppe hat beschlossen, lldb-mi mit llvm-toolchain-10 zu versenden.

Um clang und lldb verwenden zu können, müssen Benutzer lldb-mi aus seiner Quelle miDebuggerPath auf die erstellte Binärdatei lldb-mi .

@WardenGnaw Sie können ohne Python und ohne Flüche kompilieren und

Was Clang betrifft, halte ich es nicht für unangemessen anzunehmen, dass Clang für die Verwendung mit LLDB-MI existiert

Okay, ich habe es noch einmal getestet und es funktioniert unter Ubuntu 18.04.

Hier ist wie:

  1. Installieren Sie die folgenden Pakete über apt
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. Erstellen Sie Softlinks für ausführbare Dateien, damit die Dinge wie erwartet funktionieren können
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. Erstellen Sie die ausführbare Datei lldb-mi aus dem Quellcode
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

Das sollte es sein. Und hier ist mein launch.json . Grundsätzlich nur die Standardeinstellung aus clang++ voreingestellt und nichts geändert, wenn ich mich richtig erinnere.

{
    // 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 Vielleicht möchten Sie es versuchen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen