Maison > développement back-end > Golang > Comment voir la pile de Golang

Comment voir la pile de Golang

(*-*)浩
Libérer: 2019-12-14 13:46:10
original
3733 Les gens l'ont consulté

Comment voir la pile de Golang

Pile de structures de données :

Tas : Le tas peut être visualisé comme un arbre, tel que : tri par tas. Dans la file d'attente, le planificateur extrait à plusieurs reprises le premier travail de la file d'attente et l'exécute, car en réalité certaines tâches courtes attendront longtemps pour se terminer, ou certaines tâches qui ne sont pas courtes mais importantes devraient également avoir la priorité.

Heap est une structure de données conçue pour résoudre de tels problèmes.                                                                                                                                                    (Apprentissage recommandé : go)

pile : une structure de données premier entré, dernier sorti.

Méthode de mise en cache de la pile

La pile utilise un cache de premier niveau. Ils se trouvent généralement dans l'espace de stockage lorsqu'ils sont appelés et sont libérés immédiatement après l'appel. complété.

Le tas est stocké dans le cache de deuxième niveau et le cycle de vie est déterminé par l'algorithme de récupération de place de la machine virtuelle (une fois qu'il devient un objet orphelin, il peut être recyclé). Par conséquent, la vitesse d’appel de ces objets est relativement faible.

Stack Trace

Ce qui suit décrit les informations de trace de pile et comment identifier les arguments transmis à une fonction sur la pile.

La version du scénario de test suivant est Go 1.11

Exemple :

package main
import "runtime/debug"
func main() {
   slice := make([]string, 2, 4)
   Example(slice, "hello", 10)
}
func Example(slice []string, str string, i int) {
   debug.PrintStack()
}
Copier après la connexion

Le listing 1 est un programme simple, la fonction principale appelle la fonction Exemple à la ligne 5. La fonction Exemple est déclarée à la ligne 9. Elle a trois paramètres, une tranche de chaîne, une chaîne et un entier. Son corps de méthode est également très simple, avec une seule ligne, debug.PrintStack(), qui générera immédiatement une trace de pile :

goroutine 1 [running]:
runtime/debug.Stack(0x1, 0x0, 0x0)
    C:/Go/src/runtime/debug/stack.go:24 +0xae
runtime/debug.PrintStack()
    C:/Go/src/runtime/debug/stack.go:16 +0x29
main.Example(0xc000077f48, 0x2, 0x4, 0x4abd9e, 0x5, 0xa)
    D:/gopath/src/example/example/main.go:10 +0x27
main.main()
    D:/gopath/src/example/example/main.go:7 +0x79
Copier après la connexion

Trace de pile :

One La ligne montre que la goroutine en cours d'exécution est la goroutine avec l'identifiant 1.

La deuxième ligne debug.Stack() est appelée

La quatrième ligne debug.PrintStack() est appelée

La sixième ligne appelle l'emplacement du code debug.PrintStack() , la fonction Exemple située sous le package principal. Il affiche également le fichier et le chemin où se trouve le code, ainsi que le numéro de ligne où se produit debug.PrintStack() (ligne 10).

La huitième ligne appelle également le nom de la fonction Exemple, qui est la fonction principale du package principal. Il affiche également le nom et le chemin du fichier, ainsi que le numéro de ligne où la fonction Exemple a été appelée.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal