runtime: introduce GOTRACEBACK=single, now the default
Abandon (but still support) the old numbering system.
GOTRACEBACK=none is old 0
GOTRACEBACK=single is the new behavior
GOTRACEBACK=all is old 1
GOTRACEBACK=system is old 2
GOTRACEBACK=crash is unchanged
See doc comment change in runtime1.go for details.
Filed #13107 to decide whether to change default back to GOTRACEBACK=all for Go 1.6 release.
If you run into programs where printing only the current goroutine omits
needed information, please add details in a comment on that issue.
Fixes #12366.
Change-Id: I82ca8b99b5d86dceb3f7102d38d2659d45dbe0db
Reviewed-on: https://go-review.googlesource.com/16512
Reviewed-by: Austin Clements <austin@google.com>
diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go
index b99920a..e6412a3 100644
--- a/src/runtime/traceback.go
+++ b/src/runtime/traceback.go
@@ -139,7 +139,7 @@
// instead on the g0 stack.
throw("gentraceback cannot trace user goroutine on its own stack")
}
- gotraceback := gotraceback(nil)
+ level, _, _ := gotraceback()
// Fix up returns to the stack barrier by fetching the
// original return PC from gp.stkbar.
@@ -367,7 +367,7 @@
if frame.pc > f.entry {
print(" +", hex(frame.pc-f.entry))
}
- if g.m.throwing > 0 && gp == g.m.curg || gotraceback >= 2 {
+ if g.m.throwing > 0 && gp == g.m.curg || level >= 2 {
print(" fp=", hex(frame.fp), " sp=", hex(frame.sp))
}
print("\n")
@@ -582,7 +582,7 @@
if g.m.throwing > 0 && gp != nil && (gp == g.m.curg || gp == g.m.caughtsig.ptr()) {
return true
}
- traceback := gotraceback(nil)
+ level, _, _ := gotraceback()
name := funcname(f)
// Special case: always show runtime.panic frame, so that we can
@@ -592,7 +592,7 @@
return true
}
- return traceback > 1 || f != nil && contains(name, ".") && (!hasprefix(name, "runtime.") || isExportedRuntime(name))
+ return level > 1 || f != nil && contains(name, ".") && (!hasprefix(name, "runtime.") || isExportedRuntime(name))
}
// isExportedRuntime reports whether name is an exported runtime function.
@@ -658,7 +658,7 @@
}
func tracebackothers(me *g) {
- level := gotraceback(nil)
+ level, _, _ := gotraceback()
// Show the current goroutine first, if we haven't already.
g := getg()