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