aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/http/server.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2011-06-16 00:12:50 +1000
committerRob Pike <r@golang.org>2011-06-16 00:12:50 +1000
commitd6653fed98518f9e76e72a7e26bf062933d2c131 (patch)
tree5c73d9d1a1fff937477388da0ba9a28e6e46195d /src/pkg/http/server.go
parent39208939c66a375a01a6b464b13e5b2d8bf86998 (diff)
downloadgo-d6653fed98518f9e76e72a7e26bf062933d2c131.tar.xz
http: use runtime/debug.Stack() to dump stack trace on panic.
Test output now looks like this: 2011/06/15 21:10:41 http: panic serving 127.0.0.1:59729: intentional death for testing $GOROOT/src/pkg/http/server.go:495 (0x3f9f8) _func_004: buf.Write(debug.Stack()) $GOROOT/src/pkg/runtime/proc.c:1041 (0x12367) panic: reflect·call(d->fn, d->args, d->siz); $GOROOT/src/pkg/http/serve_test.go:775 (0x5831b) _func_029: panic("intentional death for testing") $GOROOT/src/pkg/http/server.go:575 (0x26366) HandlerFunc.ServeHTTP: f(w, r) $GOROOT/src/pkg/http/server.go:541 (0x261a9) *conn.serve: c.handler.ServeHTTP(w, w.req) $GOROOT/src/pkg/runtime/proc.c:178 (0x10a83) goexit: runtime·goexit(void) with $GOROOT expanded, of course. R=bradfitz, rsc CC=golang-dev https://golang.org/cl/4607051
Diffstat (limited to 'src/pkg/http/server.go')
-rw-r--r--src/pkg/http/server.go18
1 files changed, 2 insertions, 16 deletions
diff --git a/src/pkg/http/server.go b/src/pkg/http/server.go
index d4638f127c..c697ef0d3e 100644
--- a/src/pkg/http/server.go
+++ b/src/pkg/http/server.go
@@ -20,7 +20,7 @@ import (
"net"
"os"
"path"
- "runtime"
+ "runtime/debug"
"strconv"
"strings"
"sync"
@@ -490,23 +490,9 @@ func (c *conn) serve() {
}
c.rwc.Close()
- // TODO(rsc,bradfitz): this is boilerplate. move it to runtime.Stack()
var buf bytes.Buffer
fmt.Fprintf(&buf, "http: panic serving %v: %v\n", c.remoteAddr, err)
- for i := 1; i < 20; i++ {
- pc, file, line, ok := runtime.Caller(i)
- if !ok {
- break
- }
- var name string
- f := runtime.FuncForPC(pc)
- if f != nil {
- name = f.Name()
- } else {
- name = fmt.Sprintf("%#x", pc)
- }
- fmt.Fprintf(&buf, " %s %s:%d\n", name, file, line)
- }
+ buf.Write(debug.Stack())
log.Print(buf.String())
}()