stack.go 362 B

1234567891011121314151617181920212223
  1. package missinggo
  2. import (
  3. "fmt"
  4. "io"
  5. "runtime"
  6. )
  7. func WriteStack(w io.Writer, stack []uintptr) {
  8. for _, pc := range stack {
  9. if pc == 0 {
  10. break
  11. }
  12. pc--
  13. f := runtime.FuncForPC(pc)
  14. if f.Name() == "runtime.goexit" {
  15. continue
  16. }
  17. file, line := f.FileLine(pc)
  18. fmt.Fprintf(w, "# %s:\t%s:%d\n", f.Name(), file, line)
  19. }
  20. fmt.Fprintf(w, "\n")
  21. }