summaryrefslogtreecommitdiff
path: root/example_window_golang_debug.go
blob: 464ab09cb043966a747f886fb70f80278318416e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package gui

import "log"

import (
	"os"
	"runtime"
	"runtime/debug"
	"runtime/pprof"
)

func GolangDebugWindow() {
	var w, t *Node

	Config.Title = "Go Language Debug Window"
	Config.Width = 400
	Config.Height = 400
	Config.Exit = StandardClose
	w = NewWindow()

	t = w.NewTab("Debug Tab")
	log.Println("debugWindow() START")


	///////////////////////////////  Column DEBUG GOLANG   //////////////////////
	g := t.NewGroup("GO Language")

	g.NewButton("runtime.Stack()", func () {
		log.Println("\tSTART")
		buf := make([]byte, 1<<16)
		runtime.Stack(buf, true)
		log.Printf("%s", buf)
		log.Println("\tEND")
	})
	g.NewButton("dumpModuleInfo()", func () {
		log.Println("\tSTART")
		dumpModuleInfo()
		log.Println("\tEND")
	})
	g.NewButton("debug.PrintStack()", func () {
		log.Println("\tSTART")
		debug.PrintStack()
		log.Println("\tEND")
	})
	g.NewButton("pprof.Lookup(goroutine)", func () {
		log.Println("\tSTART")
		pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
		log.Println("\tEND")
	})
	g.NewButton("pprof.Lookup(heap)", func () {
		log.Println("\tSTART")
		pprof.Lookup("heap").WriteTo(os.Stdout, 1)
		log.Println("\tEND")
	})
	g.NewButton("pprof.Lookup(block)", func () {
		log.Println("\tSTART")
		pprof.Lookup("block").WriteTo(os.Stdout, 1)
		log.Println("\tEND")
	})
	g.NewButton("pprof.Lookup threadcreate", func () {
		log.Println("\tSTART")
		pprof.Lookup("threadcreate").WriteTo(os.Stdout, 1)
		log.Println("\tEND")
	})
	g.NewButton("runtime.ReadMemStats", func () {
		var s runtime.MemStats
		runtime.ReadMemStats(&s)
		log.Printf("alloc: %v bytes\n", s.Alloc)
		log.Printf("total-alloc: %v bytes\n", s.TotalAlloc)
		log.Printf("sys: %v bytes\n", s.Sys)
		log.Printf("lookups: %v\n", s.Lookups)
		log.Printf("mallocs: %v\n", s.Mallocs)
		log.Printf("frees: %v\n", s.Frees)
		log.Printf("heap-alloc: %v bytes\n", s.HeapAlloc)
		log.Printf("heap-sys: %v bytes\n", s.HeapSys)
		log.Printf("heap-idle: %v bytes\n", s.HeapIdle)
		log.Printf("heap-in-use: %v bytes\n", s.HeapInuse)
		log.Printf("heap-released: %v bytes\n", s.HeapReleased)
		log.Printf("heap-objects: %v\n", s.HeapObjects)
		log.Printf("stack-in-use: %v bytes\n", s.StackInuse)
		log.Printf("stack-sys: %v bytes\n", s.StackSys)
		log.Printf("next-gc: when heap-alloc >= %v bytes\n", s.NextGC)
		log.Printf("last-gc: %v ns\n", s.LastGC)
		log.Printf("gc-pause: %v ns\n", s.PauseTotalNs)
		log.Printf("num-gc: %v\n", s.NumGC)
		log.Printf("enable-gc: %v\n", s.EnableGC)
		log.Printf("debug-gc: %v\n", s.DebugGC)
	})
}

func dumpModuleInfo() {
	tmp, _ := debug.ReadBuildInfo()
	if tmp == nil {
		log.Println("This wasn't compiled with go module support")
		return
	}
	log.Println("mod.Path         = ", tmp.Path)
	log.Println("mod.Main.Path    = ", tmp.Main.Path)
	log.Println("mod.Main.Version = ", tmp.Main.Version)
	log.Println("mod.Main.Sum     = ", tmp.Main.Sum)
	for _, value := range tmp.Deps {
		log.Println("\tmod.Path    = ", value.Path)
		log.Println("\tmod.Version = ", value.Version)
	}
}