Le code GO de débogage peut être effectué efficacement en utilisant GDB, le débogueur GNU, qui est largement utilisé pour le débogage des programmes C, C et maintenant. Voici un guide étape par étape sur la façon de déboguer le code GO à l'aide de GDB:
Compilez le programme GO avec des symboles de débogage:
Avant de pouvoir utiliser GDB, vous devez compiler votre programme GO avec les informations de débogage incluses. Utilisez l'option -gcflags
pour l'activer:
<code class="sh">go build -gcflags "all=-N -l" your_program.go</code>
Cette commande garantit que le compilateur Go n'optimise pas le code et inclut les symboles de débogage nécessaires.
Démarrer GDB:
Une fois votre programme compilé, vous pouvez démarrer GDB:
<code class="sh">gdb ./your_program</code>
Définir les points d'arrêt:
Dans GDB, vous pouvez définir des points d'arrêt à l'aide de la commande break
. Pour GO, vous devez souvent spécifier le nom de fonction directement car le fichier: la notation de ligne peut ne pas fonctionner directement:
<code class="gdb">(gdb) break main.main</code>
Cela définit un point d'arrêt au point d'entrée de votre programme.
Exécutez le programme:
Utilisez la commande run
pour démarrer l'exécution:
<code class="gdb">(gdb) run</code>
Votre programme fonctionnera jusqu'à ce qu'il atteigne un point d'arrêt.
Inspecter les variables:
Vous pouvez inspecter les variables à l'aide de la commande print
:
<code class="gdb">(gdb) print myVariable</code>
Pour les types spécifiques à GO comme les tranches ou les cartes, vous devrez peut-être utiliser des jolies imprimeurs personnalisées, qui peuvent être trouvées dans le référentiel delve
.
Parcourez le code:
Utilisez les commandes next
et step
pour passer à travers le code ligne par ligne:
<code class="gdb">(gdb) next (gdb) step</code>
Continuer l'exécution:
Utilisez continue
pour laisser le programme s'exécuter jusqu'au prochain point d'arrêt:
<code class="gdb">(gdb) continue</code>
N'oubliez pas que GDB peut être utilisé, il n'est pas spécifiquement conçu pour GO, ce qui peut entraîner des limites dans l'inspection efficacement des structures spécifiques au GO et des goroutines.
La configuration efficace des points d'arrêt dans GO à l'aide de GDB nécessite de comprendre à la fois l'outil et la langue. Voici quelques meilleures pratiques:
Utilisez des noms de fonction pour les points d'arrêt:
Étant donné que l'exécution de Go est complexe et que le fichier: les points d'arrêt des lignes peuvent être peu fiables, utilisez les noms de fonction à la place:
<code class="gdb">(gdb) break main.main (gdb) break yourPackage.YourFunction</code>
-gcflags "all=-l"
pendant la compilation pour désactiver l'inclinaison. Définissez les points d'arrêt avant de lancer le programme:
Définissez vos points d'arrêt avant de commencer le programme pour vous assurer qu'ils sont frappés dès que possible:
<code class="gdb">(gdb) break main.main (gdb) run</code>
Utilisez des points de rupture conditionnels:
Pour minimiser les arrêts inutiles, utilisez des points d'arrêt conditionnels:
<code class="gdb">(gdb) break main.main if someCondition == true</code>
Timer les informations d'exécution de GO:
Utilisez info goroutines
pour obtenir une liste de Goroutines et définir des points d'arrêt dans Goroutines au besoin:
<code class="gdb">(gdb) info goroutines</code>
Utilisez des points de surveillance matérielle pour les modifications de la mémoire:
Si vous surveillez un emplacement de mémoire spécifique, les points de surveillance matérielle peuvent être efficaces:
<code class="gdb">(gdb) watch *somePointer</code>
Oui, il existe plusieurs alternatives à GDB spécialement conçu ou bien adapté pour le débogage GO. Voici quelques recommandations:
Creuser:
Delve est le débogueur le plus populaire et le plus puissant pour GO. Il fournit un excellent support aux Goroutines, et son interface est conçue pour fonctionner en douceur avec le runtime de Go. Vous pouvez l'installer en utilisant:
<code class="sh">go install github.com/go-delve/delve/cmd/dlv@latest</code>
Pour commencer à déboguer avec Delve:
<code class="sh">dlv debug your_program.go</code>
delve
, ce qui le rend plus adapté aux besoins de débogage spécifiques à GO.La gestion et l'inspection des goroutines lors d'une session de débogage en GO peuvent être difficiles, mais est cruciale pour comprendre les programmes simultanés. Voici comment vous pouvez le faire en utilisant Delve, qui est plus adapté à cette tâche que GDB:
Énumérez tous les Goroutines:
Utilisez la commande goroutines
pour répertorier tous les Goroutines en cours d'exécution:
<code class="delve">(dlv) goroutines</code>
Cela vous donnera une liste numérotée de Goroutines.
Commutation entre les goroutines:
Pour passer à un autre goroutine, utilisez la commande goroutine
suivie du numéro du goroutine que vous souhaitez inspecter:
<code class="delve">(dlv) goroutine 2</code>
Cette commande change le contexte en goroutine spécifié.
Inspectez l'État de Goroutine:
Utilisez la commande info goroutines
pour obtenir des informations détaillées sur l'état actuel de tous les Goroutines:
<code class="delve">(dlv) info goroutines</code>
Définir les points d'arrêt dans Goroutines:
Vous pouvez définir des points d'arrêt spécifiquement pour Goroutines en les définissant aux appels de fonction où les goroutines sont lancés. Par exemple:
<code class="delve">(dlv) break main.someFunction</code>
Ensuite, lorsque le point d'arrêt est touché, vous pouvez basculer entre les Goroutines pour inspecter leur état.
Utilisez des traces de pile:
La commande bt
(backtrace) dans Delve peut être utilisée pour voir la pile du goroutine actuel:
<code class="delve">(dlv) bt</code>
Inspecter les variables en goroutines:
Une fois dans le contexte d'une goroutine, vous pouvez inspecter les variables comme vous le feriez dans le fil principal:
<code class="delve">(dlv) print myVariable</code>
En utilisant ces techniques, vous pouvez déboguer et comprendre efficacement le comportement de votre programme GO sur plusieurs goroutines.
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!