123456789101112131415161718192021222324252627282930313233343536373839 |
- package stacktrace
- import (
- "path/filepath"
- "runtime"
- "strings"
- )
- // NewFrame returns a new stack frame for the provided information
- func NewFrame(pc uintptr, file string, line int) Frame {
- fn := runtime.FuncForPC(pc)
- if fn == nil {
- return Frame{}
- }
- pack, name := parseFunctionName(fn.Name())
- return Frame{
- Line: line,
- File: filepath.Base(file),
- Package: pack,
- Function: name,
- }
- }
- func parseFunctionName(name string) (string, string) {
- i := strings.LastIndex(name, ".")
- if i == -1 {
- return "", name
- }
- return name[:i], name[i+1:]
- }
- // Frame contains all the information for a stack frame within a go program
- type Frame struct {
- File string
- Function string
- Package string
- Line int
- }
|