From 7688ffe1341a534d42367410f4a4bef0a31a7f37 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 25 Jan 2016 09:54:39 -0800 Subject: [PATCH] runtime/pprof: document SetCPUProfile with c-archive/c-shared When using c-archive/c-shared, the signal handler for SIGPROF will not be installed, which means that runtime/pprof.StartCPUProfile won't work. There is no really good solution here, as the main program may want to do its own profiling. For now, just document that runtime/pprof doesn't work as expected, but that it will work if you use Notify to install the Go signal handler. Fixes #14043. Change-Id: I7ff7a01df6ef7f63a7f050aac3674d640a246fb4 Reviewed-on: https://go-review.googlesource.com/18911 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: David Crawshaw --- src/runtime/pprof/pprof.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go index d32b31578d..7d677cb64e 100644 --- a/src/runtime/pprof/pprof.go +++ b/src/runtime/pprof/pprof.go @@ -567,6 +567,14 @@ var cpu struct { // StartCPUProfile enables CPU profiling for the current process. // While profiling, the profile will be buffered and written to w. // StartCPUProfile returns an error if profiling is already enabled. +// +// On Unix-like systems, StartCPUProfile does not work by default for +// Go code built with -buildmode=c-archive or -buildmode=c-shared. +// StartCPUProfile relies on the SIGPROF signal, but that signal will +// be delivered to the main program's SIGPROF signal handler (if any) +// not to the one used by Go. To make it work, call os/signal.Notify +// for syscall.SIGPROF, but note that doing so may break any profiling +// being done by the main program. func StartCPUProfile(w io.Writer) error { // The runtime routines allow a variable profiling rate, // but in practice operating systems cannot trigger signals -- 2.48.1