github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/internal/debug/trace.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:40</date> 10 //</624342640929804288> 11 12 13 //+建立GO1.5 14 15 package debug 16 17 import ( 18 "errors" 19 "os" 20 "runtime/trace" 21 22 "github.com/ethereum/go-ethereum/log" 23 ) 24 25 //startgotrace打开跟踪,写入给定文件。 26 func (h *HandlerT) StartGoTrace(file string) error { 27 h.mu.Lock() 28 defer h.mu.Unlock() 29 if h.traceW != nil { 30 return errors.New("trace already in progress") 31 } 32 f, err := os.Create(expandHome(file)) 33 if err != nil { 34 return err 35 } 36 if err := trace.Start(f); err != nil { 37 f.Close() 38 return err 39 } 40 h.traceW = f 41 h.traceFile = file 42 log.Info("Go tracing started", "dump", h.traceFile) 43 return nil 44 } 45 46 //StopTrace停止正在进行的跟踪。 47 func (h *HandlerT) StopGoTrace() error { 48 h.mu.Lock() 49 defer h.mu.Unlock() 50 trace.Stop() 51 if h.traceW == nil { 52 return errors.New("trace not in progress") 53 } 54 log.Info("Done writing Go trace", "dump", h.traceFile) 55 h.traceW.Close() 56 h.traceW = nil 57 h.traceFile = "" 58 return nil 59 } 60