1// Copyright 2011 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Package debug contains facilities for programs to debug themselves while
6// they are running.
7package debug
8
9import (
10	"os"
11	"runtime"
12)
13
14// PrintStack prints to standard error the stack trace returned by runtime.Stack.
15func PrintStack() {
16	os.Stderr.Write(Stack())
17}
18
19// Stack returns a formatted stack trace of the goroutine that calls it.
20// It calls runtime.Stack with a large enough buffer to capture the entire trace.
21func Stack() []byte {
22	buf := make([]byte, 1024)
23	for {
24		n := runtime.Stack(buf, false)
25		if n < len(buf) {
26			return buf[:n]
27		}
28		buf = make([]byte, 2*len(buf))
29	}
30}
31