From ff32316084e11911462be420dd8310473b3d26fd Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 4 Jan 2024 23:28:55 -0600 Subject: ah, a much cleaner start to a debugger Finally there is some sense this debugger can finally be useful. It can be developed and worked on in isolation from the 'gui' package therefore it can call more sophisticated widget collections. 'gadgets' all moved to gadgets.BasicWindow() thank goodness all this code is isolated finally can finally rename the files first gadgets.BasicWindow() Signed-off-by: Jeff Carr --- debugGolang.go | 175 --------------------------------------------------------- 1 file changed, 175 deletions(-) delete mode 100644 debugGolang.go (limited to 'debugGolang.go') diff --git a/debugGolang.go b/debugGolang.go deleted file mode 100644 index 1cddf9a..0000000 --- a/debugGolang.go +++ /dev/null @@ -1,175 +0,0 @@ -package debugger - -import ( - "fmt" - "bytes" - // "os" - "runtime" - "runtime/debug" - "runtime/pprof" - - "go.wit.com/log" - "go.wit.com/gui/gui" -) - -func DebugGolangWindow(n *gui.Node) { - var newW, newB, g, og, outputTextbox *gui.Node - - newW = n.NewWindow("GO") - newW.Custom = newW.StandardClose - newB = newW.NewBox("hBox", true) - - g = newB.NewGroup("Language Internals") - - g.NewButton("ReadModuleInfo()", func () { - tmp, _ := debug.ReadBuildInfo() - outputTextbox.SetText(tmp.String()) - }) - g.NewButton("runtime.NumGoroutine()", func () { - buf := new(bytes.Buffer) - pprof.Lookup("goroutine").WriteTo(buf, 1) - outputTextbox.SetText(buf.String()) - - outputTextbox.AppendText(fmt.Sprintln("runtime.NumGoroutine() = ", runtime.NumGoroutine())) - }) - g.NewButton("pprof.Lookup(heap)", func () { - buf := new(bytes.Buffer) - pprof.Lookup("heap").WriteTo(buf, 1) - outputTextbox.SetText(buf.String()) - }) - g.NewButton("debug.PrintStack(current)", func () { - outputTextbox.SetText(string(debug.Stack())) - }) - g.NewButton("pprof.Lookup(goroutine)", func () { - buf := new(bytes.Buffer) - pprof.Lookup("goroutine").WriteTo(buf, 1) - outputTextbox.SetText(buf.String()) - }) - g.NewButton("pprof.Lookup(block)", func () { - buf := new(bytes.Buffer) - pprof.Lookup("block").WriteTo(buf, 1) - outputTextbox.SetText(buf.String()) - }) - g.NewButton("pprof.Lookup threadcreate", func () { - buf := new(bytes.Buffer) - pprof.Lookup("threadcreate").WriteTo(buf, 1) - outputTextbox.SetText(buf.String()) - }) - - g.NewButton("runtime.ReadMemStats()", func () { - outputTextbox.SetText(runtimeReadMemStats()) - }) - - g.NewButton("debug.FreeOSMemory()", func () { - var out string = "Before debug.FreeOSMemory():\n\n" - out += runtimeReadMemStats() - debug.FreeOSMemory() - out += "\n\nAfter debug.FreeOSMemory():\n\n" - out += runtimeReadMemStats() - outputTextbox.SetText(out) - }) - - g.NewButton("debug.ReadGCStats()", func () { - var tmp debug.GCStats - var out string - debug.ReadGCStats(&tmp) - log.Log(true, tmp) - out += fmt.Sprintln("LastGC:", tmp.LastGC, "// time.Time time of last collection") - out += fmt.Sprintln("NumGC:", tmp.NumGC, "// number of garbage collections") - out += fmt.Sprintln("PauseTotal:", tmp.PauseTotal, "// total pause for all collections") - out += fmt.Sprintln("Pause:", tmp.Pause, "// []time.Duration pause history, most recent first") - out += fmt.Sprintln("PauseEnd:", tmp.Pause, "// []time.Time pause history, most recent first") - out += fmt.Sprintln("PauseQuantiles:", tmp.PauseQuantiles, "// []time.Duration") - outputTextbox.SetText(out) - }) - - g.NewButton("debug.SetTraceback('all')", func () { - debug.SetTraceback("all") - }) - - g.NewButton("panic()", func () { - panic("test") - }) - - g = newB.NewGroup("TODO: finish these") - - // g.NewLabel("TODO:") - - g.NewButton("runtime.Stack(true)", func () { - // TODO: https://stackoverflow.com/questions/61127053/how-to-list-all-the-running-goroutines-in-a-go-program - // func Stack(buf []byte, all bool) int - }) - - g.NewButton("debug.SetMemoryLimit(int)", func () { - // TODO: - //debug.SetMemoryLimit(1024 * 1024 * 100) - }) - - g.NewButton("debug.SetMaxStack(int bytes)", func () { - // default is apparently 1GB - }) - - g.NewButton("debug.SetMaxThreads(int)", func () { - // default is apparently 10,000 - }) - - g.NewButton("debug.SetTraceback('all')", func () { - debug.SetTraceback("all") - }) - - // deprecated (probably) by String() implementation within golang - g.NewButton("dumpModuleInfo() (deprecate)", func () { - outputTextbox.SetText(dumpModuleInfo()) - }) - - og = newB.NewGroup("output") - outputTextbox = og.NewTextbox("outputBox") - outputTextbox.Custom = func () { - log.Log(true, "custom TextBox() for golang output a =", outputTextbox.S) - } -} - -func runtimeReadMemStats() string { - var s runtime.MemStats - var out string - runtime.ReadMemStats(&s) - out += fmt.Sprintln("alloc:", s.Alloc, "bytes") - out += fmt.Sprintln("total-alloc:", s.TotalAlloc, "bytes") - out += fmt.Sprintln("sys:", s.Sys, "bytes") - out += fmt.Sprintln("lookups:", s.Lookups) - out += fmt.Sprintln("mallocs:", s.Mallocs) - out += fmt.Sprintln("frees:", s.Frees) - out += fmt.Sprintln("heap-alloc:", s.HeapAlloc, "bytes") - out += fmt.Sprintln("heap-sys:", s.HeapSys, "bytes") - out += fmt.Sprintln("heap-idle:", s.HeapIdle,"bytes") - out += fmt.Sprintln("heap-in-use:", s.HeapInuse, "bytes") - out += fmt.Sprintln("heap-released:", s.HeapReleased, "bytes") - out += fmt.Sprintln("heap-objects:", s.HeapObjects) - out += fmt.Sprintln("stack-in-use:", s.StackInuse, "bytes") - out += fmt.Sprintln("stack-sys", s.StackSys, "bytes") - out += fmt.Sprintln("next-gc: when heap-alloc >=", s.NextGC, "bytes") - out += fmt.Sprintln("last-gc:", s.LastGC, "ns") - out += fmt.Sprintln("gc-pause:", s.PauseTotalNs, "ns") - out += fmt.Sprintln("num-gc:", s.NumGC) - out += fmt.Sprintln("enable-gc:", s.EnableGC) - out += fmt.Sprintln("debug-gc:", s.DebugGC) - return out -} - -func dumpModuleInfo() string { - var out string - tmp, _ := debug.ReadBuildInfo() - if tmp == nil { - out += fmt.Sprintln("This wasn't compiled with go module support") - return "" - } - out += fmt.Sprintln("mod.Path = ", tmp.Path) - out += fmt.Sprintln("mod.Main.Path = ", tmp.Main.Path) - out += fmt.Sprintln("mod.Main.Version = ", tmp.Main.Version) - out += fmt.Sprintln("mod.Main.Sum = ", tmp.Main.Sum) - for _, value := range tmp.Deps { - out += fmt.Sprintln("\tmod.Path = ", value.Path) - out += fmt.Sprintln("\tmod.Version = ", value.Version) - } - return out -} -- cgit v1.2.3