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

Comment déboguer Golang

PHPz
PHPzoriginal
2023-04-11 09:14:542066parcourir

À mesure que Golang continue de croître, il devient de plus en plus populaire parmi les développeurs. Cependant, même si vous êtes un développeur Golang expérimenté, vous pouvez rencontrer des erreurs dans votre code. A cette époque, le débogage sera très utile. Cet article vous présentera quelques connaissances de base et méthodes de débogage des programmes Golang.

Pourquoi avez-vous besoin d'un débogage ?

Dans le processus de développement d'un programme, les erreurs et les exceptions sont courantes. Ces erreurs et exceptions peuvent être causées par des éléments tels que des erreurs dans le code que vous écrivez ou des erreurs dans le système sous-jacent. Si vous ne révisez pas et ne déboguez pas soigneusement votre code au fur et à mesure que vous l'écrivez, il peut être difficile de déterminer la cause de l'erreur. Le débogage est un élément essentiel pour vous aider à détecter les problèmes et à les résoudre plus rapidement.

Compile Flag

Pendant le processus de débogage, vous pouvez utiliser -gcflags pour compiler le code et générer les informations de débogage correspondantes. Par exemple, la commande suivante compile le code dans un fichier exécutable avec les informations de débogage : -gcflags对代码进行编译,并产生相应的调试信息。例如,以下的命令将代码编译成带有调试信息的可执行文件:

go build -gcflags "-N -l" main.go

其中,-N 表示不优化代码,并生成调试信息。-l 表示禁止内联代码。这样,您就可以在运行时检查更多的变量和代码行,并更容易找到错误。当然,编译时加入调试信息也可能会影响运行时的性能。因此,在发布产品时,您需要考虑性能和调试信息之间的权衡。

Printf() 调试

Printf() 是一种简单而又实用的调试方法。它可以输出程序的状态和变量,帮助我们定位问题。在Golang中,使用Printf()需要使用fmt包。例如:

package main

import "fmt"

func main() {
    user := getUser()
    fmt.Printf("user: %v\n", user)
}

func getUser() string {
    return "user"
}

在这段代码中,我们使用Printf()输出了变量user的值。如果变量值在运行时改变,您可以输出更多的变量值,并在打印日志时添加时间戳或其他有用的信息。使用Printf()调试时,需要注意的是,如果您忘记将一些调试代码删除,这可能会影响程序的性能和调试结果。

GDB 调试

GDB是一个著名的调试器,支持Golang和其他语言。GDB可以帮助我们在程序运行时执行一系列调试操作,例如断点、变量监视和调用堆栈跟踪等。以下是一些常用的GDB命令:

  • break <line number/file name/function> : 在指定行、文件或函数处设置断点。
  • run : 运行程序。
  • next : 步过当前行,进入下一行。
  • step : 执行当前行并进入下一个函数调用。
  • print <variable> : 输出变量的值。
  • backtrace : 显示调用堆栈。
  • continue : 继续运行程序。
  • quit : 退出GDB。

以下是一个使用GDB调试程序的例子:

package main

func main() {
    x := 1
    y := 2
    z := x + y
    println(z)
}

将代码编译并使用GDB调试时,执行以下命令:

go build -gcflags "-N -l" -o ./main main.go # 编译代码
gdb ./main # 启动GDB

在GDB中,可以向程序添加断点,并使用run命令运行程序,以停在断点处。使用print命令查看变量的值,并查看调用堆栈以检查函数返回值。通过使用GDB,您可以在程序运行时更深入地分析代码,以找出错误的根本原因。

Delve 调试

Delve是一个新的Golang调试器,它使用Golang的运行时反射API,支持断点、调用堆栈跟踪和变量监视等功能。在使用Delve之前,您需要安装它。以下是一个使用Delve调试程序的例子:

package main

import "fmt"

func main() {
    fmt.Println("Hello, Delve!")
    debugger()
}

func debugger() {
    x := 1
    y := 2
    z := x + y
    fmt.Printf("z = %d\n", z)
}

使用以下命令编译和运行程序:

go build -gcflags="-N -l" -o ./main main.go # 编译代码
dlv exec ./main # 启动 Delve

在Delve中,您可以使用以下命令:

  • break <line number/file name/function> : 在指定行、文件或函数处设置断点。
  • run : 运行程序。
  • next : 步过当前行,进入下一行。
  • step : 执行当前行并进入下一个函数调用。
  • print <variable> : 输出变量的值。
  • backtrace : 显示调用堆栈。
  • continue : 继续运行程序。
  • exit : 退出Delve。

通过使用Delve,您可以方便快捷地调试Golang程序,以找出错误的原因。

总结

调试是编写高质量代码的重要一步。在Golang中,可以使用多种方法来调试程序,例如添加编译Flag、使用Printf()rrreee

Où, -N signifie ne pas optimiser le code et générer des informations de débogage. -l signifie interdire le code en ligne. De cette façon, vous pouvez inspecter davantage de variables et de lignes de code au moment de l'exécution et trouver plus facilement les erreurs. Bien entendu, l'ajout d'informations de débogage lors de la compilation peut également affecter les performances d'exécution. Par conséquent, vous devez considérer le compromis entre les performances et les informations de débogage lors de la publication de votre produit. 🎜🎜Débogage Printf()🎜🎜Printf() est une méthode de débogage simple et pratique. Il peut afficher l'état et les variables du programme et nous aider à localiser les problèmes. Dans Golang, l'utilisation de Printf() nécessite le package fmt. Par exemple : 🎜rrreee🎜Dans ce code, nous utilisons Printf() pour afficher la valeur de la variable user. Si la valeur de la variable change pendant l'exécution, vous pouvez générer davantage de valeurs de variable et ajouter des horodatages ou d'autres informations utiles lors de l'impression du journal. Lorsque vous utilisez Printf() pour le débogage, il convient de noter que si vous oubliez de supprimer du code de débogage, cela peut affecter les performances du programme et les résultats du débogage. 🎜🎜Débogage GDB🎜🎜GDB est un célèbre débogueur qui prend en charge Golang et d'autres langages. GDB peut nous aider à effectuer une série d'opérations de débogage pendant l'exécution du programme, telles que les points d'arrêt, la surveillance des variables et le suivi de la pile d'appels. Voici quelques commandes GDB couramment utilisées : 🎜
  • break <line number/file name/function> : définit un point d'arrêt sur la ligne, le fichier ou la fonction spécifié.
  • run : exécutez le programme.
  • next : passez sur la ligne actuelle et entrez la ligne suivante.
  • étape : Exécute la ligne courante et passe à l'appel de fonction suivant.
  • print <variable> : Afficher la valeur de la variable.
  • backtrace : Affiche la pile des appels.
  • continue : Continuez à exécuter le programme.
  • quit : Quitte GDB.
🎜Ce qui suit est un exemple d'utilisation de GDB pour déboguer un programme : 🎜rrreee🎜Lors de la compilation du code et de son débogage avec GDB, exécutez la commande suivante : 🎜rrreee🎜Dans GDB, vous pouvez ajouter des points d'arrêt au programme et exécutez le programme à l'aide de la commande run pour l'arrêter au point d'arrêt. Utilisez la commande print pour afficher la valeur d'une variable et afficher la pile d'appels pour vérifier les valeurs de retour de la fonction. En utilisant GDB, vous pouvez analyser votre code plus en profondeur pendant l'exécution de votre programme pour trouver la cause première des erreurs. 🎜🎜Delve Debugging🎜🎜Delve est un nouveau débogueur Golang qui utilise l'API de réflexion d'exécution de Golang et prend en charge des fonctionnalités telles que les points d'arrêt, le suivi de la pile d'appels et la surveillance des variables. Avant d'utiliser Delve, vous devez l'installer. Voici un exemple d'utilisation de Delve pour déboguer un programme : 🎜rrreee🎜Compilez et exécutez le programme à l'aide de la commande suivante : 🎜rrreee🎜Dans Delve, vous pouvez utiliser la commande suivante : 🎜
  • break &lt ;numéro de ligne/nom de fichier/fonction> : définit un point d'arrêt sur la ligne, le fichier ou la fonction spécifié.
  • run : exécutez le programme.
  • next : passez sur la ligne actuelle et entrez la ligne suivante.
  • étape : Exécute la ligne courante et passe à l'appel de fonction suivant.
  • print <variable> : Afficher la valeur de la variable.
  • backtrace : Affiche la pile d'appels.
  • continue : Continuez à exécuter le programme.
  • exit : Quitte Delve.
🎜En utilisant Delve, vous pouvez déboguer les programmes Golang rapidement et facilement pour découvrir la cause de l'erreur. 🎜🎜Résumé🎜🎜Le débogage est une étape importante dans l'écriture de code de haute qualité. Dans Golang, vous pouvez utiliser diverses méthodes pour déboguer le programme, telles que l'ajout d'un indicateur de compilation, l'utilisation de la fonction Printf() et l'utilisation de débogueurs tels que GDB et Delve. Au cours du processus de développement proprement dit, vous pouvez choisir la méthode à utiliser en fonction de vos besoins et de vos habitudes. Si vous rencontrez des problèmes lors du débogage, ne vous découragez pas, continuez à essayer de comprendre vos erreurs. En déboguant et en modifiant constamment votre code, vous pouvez créer des programmes Golang de meilleure qualité. 🎜

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