profile icon indicating copy to clipboard operation
profile copied to clipboard

Add ProfileFilename

Open josharian opened this issue 5 years ago • 2 comments

Every time I use this package, I think that I can do something like:

var flagCPUProfile = flag.String("cpuprofile", "", "write a cpuprofile to `cpuprofile`")

func main() {
	if *flagCPUProfile != "" {
		defer profile.Start(profile.ProfilePath(*flagCPUProfile)).Stop()
	}

And then I run the program with -cpuprofile=somename.pprof. And there is no profile to be found.

And then I dig through the docs and discover ProfilePath is supposed to be a directory. And then I wish there was a way to provide a filename. This is because I sometimes do multiple runs, and I want to write the results to different profiles so that I can combine them, and I don't want to have to deal with creating and cleaning up a directory per profile.

May I send a PR to add ProfileFilename, or something like it?

josharian avatar Jan 28 '20 06:01 josharian

Thanks for your issue. Something which is underdocuumented and arguably shouldn't be optional is the profile.ProfilePath option function.

If you use

defer profile.Start(profile.ProfilePath(".")).Stop()

It will write cpu.pprof to the $CWD.

I'm not opposed to a profile.ProfileFilename option, but I'm regretting using $TMPDIR as the default location for profiles.

davecheney avatar Jan 28 '20 06:01 davecheney

I always find ProfilePath -- the problem is that I misinterpret it as the path to the output file instead of as the path to the directory containing the output file, which will be named cpu.pprof, and which must already exist.

I definitely agree that defaulting to putting profiles in the CWD would be better.

josharian avatar Jan 28 '20 06:01 josharian