Home  >  Article  >  Backend Development  >  How to view golang’s stack

How to view golang’s stack

(*-*)浩
(*-*)浩Original
2019-12-14 13:46:103628browse

How to view golang’s stack

Data structure stack:

Heap: The heap can be regarded as a tree, such as: heap sort. In the queue, the scheduler repeatedly extracts the first job in the queue and runs it, because in reality some short tasks will wait for a long time to end, or some jobs that are not short but important are also should have priority.

Heap is a data structure designed to solve such problems. (Recommended learning: Go )

stack: A advanced data structure.

Stack caching method

The stack uses a first-level cache. They are usually in the storage space when they are called, and are released immediately after the call is completed.

The heap is stored in the second-level cache, and the life cycle is determined by the garbage collection algorithm of the virtual machine (not that it can be recycled once it becomes an orphan object). Therefore, the speed of calling these objects is relatively low.

Stack Trace

The following discusses stack trace information and how to identify the parameters passed to a function on the stack.

The version of the following test case is Go 1.11

Example:

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()
}

Listing 1 is a simple program, the main function calls the Example function on line 5. The Example function is declared on line 9. It has three parameters, a string slice, a string and an integer. Its method body is also very simple, with only one line, debug.PrintStack(), which will immediately generate a stack trace information:

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

Stack trace information:

One line shows that the running goroutine is the goroutine with id 1.

The second line debug.Stack() is called

The fourth line debug.PrintStack() is called

The sixth line calls debug.PrintStack() code location , the Example function located under the main package. It also shows the file and path where the code is located, and the line number where debug.PrintStack() occurs (line 10).

The eighth line also calls the name of the function Example, which is the main function of the main package. It also shows the file name and path, and the line number where the Example function was called.

The above is the detailed content of How to view golang’s stack. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn