debug

最后更新于:2022-04-02 02:45:50

[TOC] ## 语法 ``` func FreeOSMemory() // 强制进行一次垃圾收集 func PrintStack() func ReadGCStats(stats *GCStats) gc 的stats func SetGCPercent(percent int) int // SetMaxStack设置单个goroutine堆栈可以使用的最大内存量。 // 如果在扩展堆栈时有任何goroutine超出了此限制,程序将崩溃。 // 初始设置在64位系统上为1 GB,在32位系统上为250 MB。 func SetMaxStack(bytes int) int // 该限制控制操作系统线程数 func SetMaxThreads(threads int) int func SetPanicOnFault(enabled bool) bool func SetTraceback(level string) func Stack() []byte ``` ### type GCStats ``` type GCStats struct { LastGC time.Time // time of last collection NumGC int64 // number of garbage collections PauseTotal time.Duration // total pause for all collections Pause []time.Duration // pause history, most recent first PauseEnd []time.Time // pause end times history, most recent first PauseQuantiles []time.Duration } ``` ## 实例 ### debug.PrintStack 打印堆栈 ``` func main() { defer func() { if r := recover(); r != nil { err := r.(error) fmt.Printf("%+v\n", err) debug.PrintStack() } }() demo() time.Sleep(1 * time.Second) } func demo() { demo1() } func demo1() { panic("hello world") } ``` ### ReadGCStats ``` var a debug.GCStats debug.ReadGCStats(&a) fmt.Printf("%+v\n", a) ``` ### Stack ``` // 实现 func Stack() []byte { buf := make([]byte, 1024) for { n := runtime.Stack(buf, false) if n < len(buf) { return buf[:n] } buf = make([]byte, 2*len(buf)) } } ```
';