Home | History | Annotate | Download | only in debug
      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.
      7 package debug
      8 
      9 import (
     10 	"os"
     11 	"runtime"
     12 )
     13 
     14 // PrintStack prints to standard error the stack trace returned by runtime.Stack.
     15 func 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.
     21 func 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