mirror of
https://github.com/golang/go
synced 2024-11-19 14:24:47 -07:00
testing: use runtime/debug to format panics
Among other things, this avoids putting a testing.go:nnn: prefix on every line of the stack trace. R=golang-dev, r, dsymonds, r CC=golang-dev https://golang.org/cl/5651081
This commit is contained in:
parent
6a75ece01c
commit
f735d2d9d3
@ -2,9 +2,10 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package debug
|
||||
package debug_test
|
||||
|
||||
import (
|
||||
. "runtime/debug"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
@ -71,6 +71,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
"runtime/pprof"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -225,19 +226,6 @@ func (c *common) Fatalf(format string, args ...interface{}) {
|
||||
c.FailNow()
|
||||
}
|
||||
|
||||
// TODO(dsymonds): Consider hooking into runtime·traceback instead.
|
||||
func (c *common) stack() {
|
||||
for i := 2; ; i++ { // Caller we care about is the user, 2 frames up
|
||||
pc, file, line, ok := runtime.Caller(i)
|
||||
f := runtime.FuncForPC(pc)
|
||||
if !ok || f == nil {
|
||||
break
|
||||
}
|
||||
c.Logf("%s:%d (0x%x)", file, line, pc)
|
||||
c.Logf("\t%s", f.Name())
|
||||
}
|
||||
}
|
||||
|
||||
// Parallel signals that this test is to be run in parallel with (and only with)
|
||||
// other parallel tests in this CPU group.
|
||||
func (t *T) Parallel() {
|
||||
@ -260,11 +248,12 @@ func tRunner(t *T, test *InternalTest) {
|
||||
// a call to runtime.Goexit, record the duration and send
|
||||
// a signal saying that the test is done.
|
||||
defer func() {
|
||||
// Consider any uncaught panic a failure.
|
||||
if err := recover(); err != nil {
|
||||
t.failed = true
|
||||
t.Log(err)
|
||||
t.stack()
|
||||
if false {
|
||||
// Log and recover from panic instead of aborting binary.
|
||||
if err := recover(); err != nil {
|
||||
t.failed = true
|
||||
t.Logf("%s\n%s", err, debug.Stack())
|
||||
}
|
||||
}
|
||||
|
||||
t.duration = time.Now().Sub(t.start)
|
||||
|
Loading…
Reference in New Issue
Block a user