Maison >développement back-end >Golang >Comment déboguer Golang Linux

Comment déboguer Golang Linux

PHPz
PHPzoriginal
2023-05-14 15:25:38956parcourir

Le langage Go est un langage de programmation de haut niveau publié pour un développement plus pratique et plus rapide. Il peut non seulement fonctionner sur plusieurs systèmes d'exploitation tels que Windows, MacOS et Linux, mais fournit également de puissants outils de débogage pour aider le développement à résoudre les problèmes. Cet article explique comment déboguer les programmes en langage Go sur les systèmes Linux.

Outils de débogage

Le langage Go fournit un débogueur intégré - go debug, mais la haute efficacité de Go apporte également de nombreux défis de débogage. Dlv (https://github.com/go-delve/delve) est un débogueur moderne pour le langage Go qui prend en charge les fonctionnalités de débogage spécifiques à Go. Dlv fournit des fonctions de débogage courantes telles que le traçage en une seule étape, l'affichage des variables, la modification des variables et les points d'arrêt. De plus, GDB prend également en charge le débogage du langage Go, mais il ne peut pas comprendre le planificateur du langage Go, il est donc plus adapté au développement du noyau ou au débogage de programmes qui n'ont besoin que de quelques fonctions spécifiques à Go.

Installation de Dlv

Dlv est écrit en langage Go, son installation nécessite donc d'abord d'installer le langage Go lui-même. Vous pouvez télécharger la dernière version du package d'installation du langage Go sur le site officiel (https://golang.org/dl/) et le configurer dans les variables d'environnement.

Après avoir installé le langage Go, nous devons d'abord installer la bibliothèque dont dépend Dlv - des utilitaires Linux liés dynamiquement :

sudo apt-get update
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

Ensuite, exécutez la commande suivante pour installer Dlv :

go get -u github.com/go-delve/delve/cmd/dlv

La commande ci-dessus installera Dlv dans le $GOPATH /bin. Vous pouvez l'ajouter manuellement à la variable PATH, ou vous pouvez l'ajouter au PATH avec la commande suivante :

echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bashrc
source ~/.bashrc

Compilez et déboguer le programme

Nous devons aller dans le répertoire où se trouve le programme, utilisez go build pour compiler le programme et générer le fichier binaire. En supposant que notre programme s'appelle debug-demo, nous pouvons le compiler avec la commande suivante :

go build -gcflags "-N -l" -o debug-demo
  • -gcflags "-N -l": Ajoutez un indicateur de compilation pour garantir que le compilateur n'optimisera pas le code, facilitant ainsi le débogage. .
  • -o debug-demo : Nommez le fichier exécutable généré debug-demo.

Afin de résoudre le problème de l'assemblage du code source, nous pouvons également utiliser la commande go env pour obtenir la valeur de CGO_ENABLED, la définir sur 0, puis compiler à nouveau :

go env
go build -gcflags "-N -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go

Définir les points d'arrêt

Définir les points d'arrêt dans le programme est l'opération la plus couramment utilisée lors du débogage. Nous pouvons définir un point d'arrêt n'importe où dans le code pour attendre que l'exécution du programme atteigne cet emplacement.

En utilisant Dlv, vous pouvez définir des points d'arrêt des deux manières suivantes :

  1. Interface graphique (recommandée)

L'utilisation de l'interface graphique de Dlv peut faire fonctionner et modifier le programme de manière plus intuitive. Exécutez la commande suivante, puis l'interface graphique s'ouvrira automatiquement :

dlv debug ./debug-demo
  1. Ligne de commande

Exécutez la commande suivante pour accéder au mode ligne de commande Dlv :

dlv debug ./debug-demo --headless --listen=:2345 --api-version=2

Après avoir entré Dlv, nous pouvons utiliser le break (ou l'abrégé comme b) commande pour définir un point d'arrêt :

(b)reak {<location>|<function>|<filename>:<line>|<remote package path>}: 设置断点
(b)reakpoints: 显示当前所有的断点
(d)elete {<breakpoint#>|<breakpoint.id>}: 删除断点#或通过Breakpoint.id删除指定断点
(c)ontinue: 从当前位置继续执行程序,直到下一个断点或程序完结

Par exemple, nous pouvons définir un point d'arrêt sur la ligne 10 du programme :

(b)reak main.go:10

Contrôler l'exécution du programme

Pendant l'exécution du programme, vous pouvez utiliser l'étape ( ou abrégé en s) et commandes suivantes (ou abrégées en n) Programme de contrôle en cours d'exécution :

(s)tep: 单步调试,如果当前位置是函数,则进入该函数内部
(n)ext: 单步调试,如果当前位置是函数,则不进入该函数内部

Afficher les variables

Dlv fournit également des commandes pour afficher les variables. Utilisez la commande print (ou abrégé p) pour afficher les variables dans la portée actuelle :

(p)rint <variable>: 显示变量

Par exemple, nous pouvons utiliser la commande suivante pour afficher les variables a et la variable b :

(p)rint a
(p)rint b

Modifier les variables

En plus d'afficher les variables, Dlv prend également en charge la modification de la valeur des variables. Utilisez la commande set pour modifier la valeur. de variables :

(s)et <variable> = <value>: 修改变量的值

Par exemple, nous pouvons utiliser la commande suivante pour modifier la valeur de la variable a à 100 :

(s)et a = 100

Résumé

Cet article présente comment utiliser Dlv pour déboguer les programmes Go sur les systèmes Linux. Tout d'abord, nous avons installé le langage Go et le débogueur Dlv, puis utilisé go build pour compiler le programme et définir des points d'arrêt dans le programme, utiliser l'interface graphique ou la ligne de commande de Dlv pour contrôler l'exécution du programme, et afficher et modifier les valeurs des variables pour résoudre les problèmes Go rencontrés lors du débogage du programme. J'espère que grâce à cet article, les lecteurs pourront maîtriser les compétences de base nécessaires à l'utilisation de Dlv pour déboguer les programmes Go sous les systèmes Linux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn