Konfiguration der launch.json für funktionierende Breakpoints auf macOS

Melden
  1. Einleitung
  2. Pfadangaben und Arbeitsverzeichnis
  3. Compiler- und Debug-Informationen
  4. Debugger-Typ und Einstellung
  5. Systemschutz und Berechtigungen
  6. Quellcode-Map und Source File Mapping
  7. Fazit

Einleitung

Beim Debuggen von Programmen auf macOS mit Visual Studio Code ist die richtige Konfiguration der launch.json entscheidend, damit Breakpoints korrekt erkannt und ausgeführt werden. Aufgrund der unterschiedlichen Betriebssystemarchitektur und den Besonderheiten von macOS, wie z. B. Systemschutzmechanismen und Pfadstrukturen, ist darauf zu achten, dass sämtliche Einstellungen in der launch.json auf die Gegebenheiten von macOS angepasst sind.

Pfadangaben und Arbeitsverzeichnis

Eine der häufigsten Fehlerquellen bei der Fehlfunktion von Breakpoints auf macOS besteht in falsch angegebenen Pfaden. macOS verwendet typischerweise POSIX-Pfade mit Schrägstrichen /. In der launch.json müssen sowohl der Pfad zur ausführbaren Datei als auch das Arbeitsverzeichnis (cwd) exakt auf die tatsächliche Position der Dateien abgestimmt sein. Abweichungen, relative Pfadangaben oder Tippfehler verhindern, dass der Debugger den Code zur Laufzeit korrekt zuordnen kann.

Beispiel:

{ "version": "0.2.0", "configurations": , "cwd": "/Users/username/Projects/meinProgramm", ... } ]}

Compiler- und Debug-Informationen

Damit Breakpoints sinnvoll funktionieren, müssen beim Kompilieren Debug-Informationen generiert werden. Auf macOS ist es wichtig, den Compiler mit dem Flag -g zu verwenden, um Debug-Symbole einzufügen. Fehlen diese Symbole, kann der Debugger keine Zuordnung zwischen Binärdatei und Quellcode herstellen.

Beispiel für Kompiliervorgang mit gcc oder clang:

clang -g -o meinProgramm main.c

Diese Voraussetzung betrifft nicht die launch.json direkt, ist aber für funktionierende Breakpoints zwingend notwendig.

Debugger-Typ und Einstellung

Für das Debugging auf macOS wird häufig lldb verwendet, da es der native Debugger von Apple ist und eine bessere Integration besitzt als gdb, das auf macOS aus verschiedenen Gründen oft problematisch ist. In der launch.json sollte daher im Feld type entweder lldb oder cppdbg (mit entsprechendem Debugger) verwendet werden, je nachdem, welches Debug-Extension-Paket genutzt wird.

Beispiel für LLDB-Konfiguration:

{ "version": "0.2.0", "configurations": , "cwd": "/Users/username/Projects/meinProgramm", "stopOnEntry": false } ]}

Systemschutz und Berechtigungen

macOS bringt Sicherheitsmechanismen wie die Systemintegritätsschutzfunktion (SIP) und den Zugriffsschutz für Entwicklerwerkzeuge mit. Damit der Debugger Breakpoints korrekt setzen und auslösen kann, muss Visual Studio Code ausreichende Berechtigungen erhalten. Dies kann bedeuten, dass Sie Visual Studio Code in den Systemeinstellungen unter Datenschutz & Sicherheit → Entwicklerwerkzeuge oder Vollzugriff auf Festplatten explizit zulassen müssen. Auch die Terminal-App, falls der Debug-Vorgang über das Terminal gestartet wird, benötigt diese Rechte.

Ohne die entsprechenden Rechte wehrt sich das Betriebssystem gegen das Setzen von Breakpoints oder das Anhalten des Programms, was zu scheinbar nicht funktionierenden Breakpoints führt.

Quellcode-Map und Source File Mapping

Falls Quellcode und Binärdateien an unterschiedlichen Orten liegen oder symbolische Links verwendet werden, kann es notwendig sein, in der launch.json eine sourceMap zu definieren. Diese sorgt dafür, dass der Debugger Quellcode-Dateien auf dem Dateisystem des Macs finden kann. So vermeidet man Fehlermeldungen wie Breakpoint konnte nicht gesetzt werden.

Beispiel:

"sourceMap": { "/app/src": "/Users/username/Projects/meinProgramm/src"}

Fazit

Damit Breakpoints auf macOS mit Visual Studio Code funktionieren, ist vor allem auf korrekte Pfadangaben in der launch.json, passende Debugger-Auswahl (idealerweise LLDB), das Vorhandensein von Debug-Symbolen beim Kompilieren sowie ausreichende Zugriffsrechte zu achten. Kleinste Abweichungen bei Pfadstrukturen oder fehlende Berechtigungen führen häufig dazu, dass Breakpoints ignoriert werden oder nicht getroffen werden können. Ein ganzheitlicher Ansatz, der sowohl die Debugger-Konfiguration als auch die macOS-spezifischen Besonderheiten berücksichtigt, sorgt für ein reibungsloses Debugging-Erlebnis.

0
0 Kommentare