Einrichten von Delve und Air zum Debuggen von Golang mit VS-Code

王林
Freigeben: 2024-08-10 06:49:32
Original
849 Leute haben es durchsucht

Setting up Delve and Air to debug Golang with VS Code

VS-Code-Erweiterung

Suchen Sie in VS Code Extensions nach Go und installieren Sie es.

  • https://marketplace.visualstudio.com/items?itemName=golang.Go

Debugger

Sie müssen Delve installieren, um Debugging (Haltepunkte, Step-Through usw.) in VS Code zu erhalten.

go install github.com/go-delve/delve/cmd/dlv@latest
Nach dem Login kopieren

Wenn Sie asdff verwendet haben, um Go zu installieren, befindet sich delve in:

~/.asdf/shims/dlv
Nach dem Login kopieren

Vielleicht möchten Sie asdf reshim ausführen, nachdem Sie ein Go-Paket installiert haben.

Live-Nachladen

Da GoLang eine kompilierte Sprache ist, wird der Code in eine einzige ausführbare Datei kompiliert. Während der Entwicklung müssen wir bei Änderungen ständig neu kompilieren, was insbesondere in VS Code ein manueller Prozess sein kann.

Wir werden https://github.com/air-verse/air verwenden, um das Live-Nachladen für uns durchzuführen.

Es handelt sich um ein Befehlszeilentool, das nur einmal in Ihrem Projektordner ausgeführt werden muss, um auf Änderungen zu achten.

Installation

Installieren Sie das Paket. Vorausgesetzt, Sie haben Version 1.22 oder höher.

go install github.com/air-verse/air@latest
Nach dem Login kopieren

Wenn Sie asdf zur Installation von Go verwendet haben, befindet sich Air in:

~/.asdf/shims/air
Nach dem Login kopieren

Initialisieren Sie eine air.toml-Konfigurationsdatei in Ihrem Projektstammverzeichnis

cd ~/myproject
air init
Nach dem Login kopieren

Bearbeiten Sie den Befehl air.toml [[go build]] wie folgt:
- all: Flags sollten auf alle Pakete in Build-Paketen angewendet werden
- -N: Optimierungen deaktiviert, um sicherzustellen, dass der generierte Code für ein einfacheres Debugging näher am Quellcode liegt
- -l: Deaktiviert die Inlining-Optimierung, bei der kleine Funktionen an Ort und Stelle erweitert werden, um den Overhead von Funktionsaufrufen zu reduzieren und das Debuggen zu erleichtern
- Argumentation aus Delve Reference

- cmd = "go build -o ./tmp/main ."
+ cmd = 'CGO_ENABLED=0 go build -gcflags=all="-N -l"-o ./tmp/main .'"'
Nach dem Login kopieren

[!info]
Air läuft mit den Standardkonfigurationen, wenn:

  • Die Datei „air.toml“ ist ungültig
  • Führen Sie es in Ihrem Projektordner aus, indem Sie den Befehl air ausführen

Ihre air.toml-Datei wird nicht verwendet.

Bearbeiten Sie air.toml full_bin, um die erstellte Binärdatei mit [[Delve]] auszuführen.

- full_bin = ""
+ full_bin = "dlv exec ./tmp/main --listen=127.0.0.1:2345 --headless=true --api-version=2 --accept-multiclient --continue --log --"
Nach dem Login kopieren

Dadurch wird Delve auf Port 2345 ausgeführt.

Führen Sie Air in Ihrem Projektordner aus. Sie sollten die folgende Ausgabe sehen.

> cd ~/my-project
> air
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.52.3, built with Go go1.22.5

mkdir ~/my-project/tmp
watching .
!exclude tmp
building...
running...
API server listening at: 127.0.0.1:2345
2024-07-28T18:47:07+07:00 info layer=debugger launching process with args: [./tmp/main]
2024-07-28T18:47:09+07:00 debug layer=debugger entryPoint 0x1006e8000 machoOff 0x100000000
2024-07-28T18:47:09+07:00 warning layer=debugger debug_frame workaround not applied: function internal/abi.(*RegArgs).IntRegArgAddr (at 0x1006e9070) covered by 0x1006e9070-0x1006e9110
2024-07-28T18:47:09+07:00 debug layer=debugger Adding target 11503 "/Users/alaay/projects/scheduleasy/tmp/main"
2024-07-28T18:47:09+07:00 debug layer=debugger continuing
2024-07-28T18:47:09+07:00 debug layer=debugger ContinueOnce
2024/07/28 18:47:09 Starting server on :5602
Nach dem Login kopieren

Anhängen von VS-Code an Delve

Fügen Sie in Ihrer .vscode/launch.config-Datei Folgendes hinzu:

{
  // 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": "Attach to Air",
      "type": "go",
      "request": "attach",
      "mode": "remote",
      "port": 2345,
      "host": "127.0.0.1"
    }
  ]
}
Nach dem Login kopieren

Starten Sie in VS Code Run and Debug (CMD + SHIFT + D) das Debuggen mit Attach to Air

[!info] VS-Code kann keine Verbindung herstellen
Wenn VS Code keine Verbindung herstellen kann, wird Delve höchstwahrscheinlich nicht auf Port 2345 ausgeführt. Versuchen Sie, mit lsof -i :2345 zu überprüfen, ob dlv über diesen Port ausgeführt wird. Wenn es läuft, sollten Sie Folgendes sehen:

$ lsof -i :2345
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
dlv     15464 username    3u  IPv4 0x201bff14586139e3      0t0  TCP localhost:dbm (LISTEN)
Nach dem Login kopieren

Fallstricke

Go ist eine kompilierte Sprache. Das bedeutet, dass Code in eine Binärdatei kompiliert und dann ausgeführt wird. Immer wenn wir Änderungen am Code in vscode vornehmen:

  • Die Luft wird auf die Veränderungen achten
  • Binärdatei neu erstellen
  • Starten Sie Delve um 23:45 Uhr

Dies bedeutet, dass die Verbindung zum vscode getrennt wird und Sie den vscode zum Vertiefen erneut anschließen müssen.

Das obige ist der detaillierte Inhalt vonEinrichten von Delve und Air zum Debuggen von Golang mit VS-Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!