Heim > Backend-Entwicklung > Golang > So zeigen Sie Golangs Stack an

So zeigen Sie Golangs Stack an

(*-*)浩
Freigeben: 2019-12-14 13:46:10
Original
3722 Leute haben es durchsucht

So zeigen Sie Golangs Stack an

Stapel von Datenstrukturen:

Heap: Der Heap kann als Baum betrachtet werden, z. B.: Heap-Sortierung. In der Warteschlange extrahiert der Scheduler wiederholt den ersten Job in der Warteschlange und führt ihn aus, da einige kurze Aufgaben in Wirklichkeit lange auf ihr Ende warten, oder einige Jobs, die nicht kurz, aber wichtig sind, ebenfalls Priorität haben sollten.

Heap ist eine Datenstruktur, die zur Lösung solcher Probleme entwickelt wurde.                                                                                                                                               (Empfohlenes Lernen: go)

Stack: eine First-in-Last-out-Datenstruktur.

Stapel-Caching-Methode

Der Stapel verwendet einen Cache der ersten Ebene. Sie befinden sich normalerweise beim Aufruf im Speicherplatz und werden sofort nach Abschluss des Aufrufs freigegeben .

Der Heap wird im Cache der zweiten Ebene gespeichert und der Lebenszyklus wird durch den Garbage-Collection-Algorithmus der virtuellen Maschine bestimmt (Sobald es zu einem verwaisten Objekt wird, kann es nicht recycelt werden). Daher ist die Geschwindigkeit beim Aufrufen dieser Objekte relativ gering.

Stack-Trace

Im Folgenden werden Stack-Trace-Informationen und die Identifizierung von Argumenten erläutert, die an eine Funktion auf dem Stack übergeben werden.

Die Version des folgenden Testfalls ist Go 1.11

Beispiel:

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()
}
Nach dem Login kopieren

Listing 1 ist ein einfaches Programm, die Hauptfunktion ruft die Beispielfunktion in Zeile 5 auf. Die Beispielfunktion wird in Zeile 9 deklariert. Sie verfügt über drei Parameter, einen String-Slice, einen String und eine Ganzzahl. Sein Methodenkörper ist ebenfalls sehr einfach, mit nur einer Zeile, debug.PrintStack(), die sofort einen Stack-Trace generiert:

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
Nach dem Login kopieren

Stack-Trace:

Eins Zeile zeigt, dass die laufende Goroutine die Goroutine mit der ID 1 ist.

Die zweite Zeile debug.Stack() wird aufgerufen

Die vierte Zeile debug.PrintStack() wird aufgerufen

Die sechste Zeile ruft debug.PrintStack() auf. die Beispielfunktion, die sich unter dem Hauptpaket befindet. Außerdem werden die Datei und der Pfad angezeigt, in denen sich der Code befindet, sowie die Zeilennummer, in der debug.PrintStack() auftritt (Zeile 10).

Die achte Zeile ruft auch den Namen der Funktion „Beispiel“ auf, bei der es sich um die Hauptfunktion des Hauptpakets handelt. Außerdem werden der Dateiname und der Pfad sowie die Zeilennummer angezeigt, in der die Beispielfunktion aufgerufen wurde.

Das obige ist der detaillierte Inhalt vonSo zeigen Sie Golangs Stack an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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