github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/internal/debug/flags.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2016 Go Ethereum作者 10 //此文件是Go以太坊库的一部分。 11 // 12 //Go-Ethereum库是免费软件:您可以重新分发它和/或修改 13 //根据GNU发布的较低通用公共许可证的条款 14 //自由软件基金会,或者许可证的第3版,或者 15 //(由您选择)任何更高版本。 16 // 17 //Go以太坊图书馆的发行目的是希望它会有用, 18 //但没有任何保证;甚至没有 19 //适销性或特定用途的适用性。见 20 //GNU较低的通用公共许可证,了解更多详细信息。 21 // 22 //你应该收到一份GNU较低级别的公共许可证副本 23 //以及Go以太坊图书馆。如果没有,请参见<http://www.gnu.org/licenses/>。 24 25 package debug 26 27 import ( 28 "fmt" 29 "io" 30 "net/http" 31 _ "net/http/pprof" 32 "os" 33 "runtime" 34 35 "github.com/ethereum/go-ethereum/log" 36 "github.com/ethereum/go-ethereum/log/term" 37 "github.com/ethereum/go-ethereum/metrics" 38 "github.com/ethereum/go-ethereum/metrics/exp" 39 "github.com/fjl/memsize/memsizeui" 40 colorable "github.com/mattn/go-colorable" 41 "gopkg.in/urfave/cli.v1" 42 ) 43 44 var Memsize memsizeui.Handler 45 46 var ( 47 verbosityFlag = cli.IntFlag{ 48 Name: "verbosity", 49 Usage: "Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail", 50 Value: 3, 51 } 52 vmoduleFlag = cli.StringFlag{ 53 Name: "vmodule", 54 /*GE:“每个模块的详细程度:逗号分隔的<pattern>=<level>(例如eth/*=5,p2p=4)”, 55 值:“ 56 } 57 backtraceAtFlag=cli.stringFlag_ 58 名称:“回溯”, 59 用法:“在特定的日志记录语句(例如\”block.go:271\“)请求堆栈跟踪”, 60 值:“ 61 } 62 debugflag=cli.boolflag_ 63 名称:“调试”, 64 用法:“用调用站点位置(文件和行号)预先准备日志消息”, 65 } 66 pprofflag=cli.boolflag_ 67 姓名:“PPROF”, 68 用法:“启用pprof http服务器”, 69 } 70 pprofPortFlag=cli.intFlag_ 71 姓名:“PrPopPt”, 72 用法:“pprof http服务器侦听端口”, 73 值:6060, 74 } 75 pprofaddflag=cli.stringflag_ 76 名称:“pprofaddr”, 77 用法:“pprof http服务器侦听接口”, 78 值:“127.0.0.1”, 79 } 80 memprofilerateflag=cli.intflag_ 81 名称:“MemProfileRate”, 82 用法:“以给定速率打开内存分析”, 83 值:runtime.memprofilerate, 84 } 85 blockProfileRateFlag=cli.intFlag_ 86 名称:“blockprofilerate”, 87 用法:“以给定速率打开块分析”, 88 } 89 CpPrPuliFrase= CLI.STRIGLAG { 90 名称:“cpuprofile”, 91 用法:“将CPU配置文件写入给定文件”, 92 } 93 traceFlag=cli.stringFlag_ 94 姓名:“追踪”, 95 用法:“将执行跟踪写入给定文件”, 96 } 97 ) 98 99 //标志保存调试所需的所有命令行标志。 100 var flags=[]cli.flag_ 101 详细标志,vmoduleflag,backtraceatflag,debugflag, 102 pprofFlag、pprofAddFlag、pprofPortFlag 103 memprofilerateflag、blockprofilerateflag、cpupprofileflag、traceflag、 104 } 105 106 var 107 Ostream日志处理程序 108 glogger*日志.gloghandler 109 ) 110 111 函数() 112 usecolor:=term.istty(os.stderr.fd())和os.getenv(“term”)!=“哑巴” 113 输出:=io.writer(os.stderr) 114 如果使用颜色{ 115 输出=可着色。新的可着色stderr() 116 } 117 ostream=log.streamHandler(输出,log.terminalFormat(useColor)) 118 glogger=log.newgloghandler(奥斯特里姆) 119 } 120 121 //St设置基于CLI标志初始化配置文件和日志记录。 122 //应该在程序中尽早调用它。 123 func设置(ctx*cli.context,logdir string)错误 124 /测井 125 log printorigins(ctx.globalbool(debugflag.name))。 126 如果Logdir!=“{” 127 rfh,err:=log.rotatingfilehandler( 128 洛迪尔 129 262144, 130 log.JSONFormatOrderedEx(false, true), 131 ) 132 如果犯错!= nIL{ 133 返回错误 134 } 135 glogger.sethandler(log.multihandler(ostream,rfh))。 136 } 137 glogger.verbosity(log.lvl(ctx.globalint(verbosityflag.name))) 138 glogger.vmodule(ctx.globalString(vmoduleFlag.name))。 139 glogger.backtraceat(ctx.globalstring(backtraceatflag.name))。 140 log.root().sethandler(glogger) 141 142 //分析,跟踪 143 runtime.memprofilerate=ctx.globalint(memprofilerateflag.name) 144 handler.setBlockProfileRate(ctx.globalint(blockProfileRateFlag.name))。 145 如果tracefile:=ctx.globalstring(traceflag.name);tracefile!=“{” 146 如果错误:=handler.startgotrace(tracefile);错误!= nIL{ 147 返回错误 148 } 149 } 150 如果cpufile:=ctx.globalString(cpuProfileFlag.name);cpufile!=“{” 151 if err := Handler.StartCPUProfile(cpuFile); err != nIL{ 152 返回错误 153 } 154 } 155 156 //PPROF服务器 157 如果ctx.globalbool(pprofflag.name) 158 地址:=fmt.sprintf(“%s:%d”,ctx.globalString(pprofaddflag.name),ctx.globalint(pprofportflag.name)) 159 startpprof(地址) 160 } 161 返回零 162 } 163 164 func StartPProf(地址字符串){ 165 //在任何/debug/metrics请求中将go metrics挂接到expvar中,加载所有var 166 //从注册表到ExpVar,并执行常规ExpVaR处理程序。 167 exp.exp(metrics.defaultregistry) 168 HTTP.句柄(“/MeistSe/”,http.StripPrefix(“/MESIZE”和MESIZE)) 169 log.info(“启动pprof服务器”,“addr”,fmt.sprintf(“http://%s/debug/pprof”,address))。 170 转到函数() 171 如果错误:=http.listenandserve(address,nil);错误!= nIL{ 172 log.error(“运行pprof server失败”,“err”,err) 173 } 174 }() 175 } 176 177 //exit停止所有正在运行的配置文件,将其输出刷新到 178 //各自的文件。 179 FUNC退出(){ 180 handler.stopcupprofile()处理程序 181 handler.stopgotrace()。 182 }