30 lines
756 B
Go
30 lines
756 B
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package debug contains facilities for programs to debug themselves while
|
|
// they are running.
|
|
package debug
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
)
|
|
|
|
// PrintStack prints to standard error the stack trace returned by runtime.Stack.
|
|
func PrintStack() {
|
|
os.Stderr.Write(Stack())
|
|
}
|
|
|
|
// Stack returns a formatted stack trace of the goroutine that calls it.
|
|
// It calls runtime.Stack with a large enough buffer to capture the entire trace.
|
|
func Stack() []byte {
|
|
buf := make([]byte, 1024)
|
|
for {
|
|
n := runtime.Stack(buf, false)
|
|
if n < len(buf) {
|
|
return buf[:n]
|
|
}
|
|
buf = make([]byte, 2*len(buf))
|
|
}
|
|
}
|