Пример #1
0
func main() {
	flag.Parse()
	args := flag.Args()
	if len(args) == 1 {
		// pprof http://...
		r := new(report.Reporter)
		u := args[0]
		resp, err := http.Get(u)
		if err != nil {
			log.Fatal(err)
		}
		LoadProfile(r, resp.Body)
		symu, err := url.Parse(u)
		if err != nil {
			log.Fatal(err)
		}
		symu.Path = "/debug/pprof/symbol"
		table := &report.RemoteResolver{Url: symu.String()}
		err = table.Prepare(r.Symbols())
		if err != nil {
			log.Fatal(err)
		}
		r.Resolver = table
		PrintGraph(os.Stdout, r, u)
	} else {
		exe, prof := args[0], args[1]
		r, err := LoadSymbols(exe)
		if err != nil {
			log.Fatal(err)
		}
		f, err := os.Open(prof)
		if err != nil {
			log.Fatal(err)
		}
		LoadProfile(r, f)
		PrintGraph(os.Stdout, r, exe)
	}
}