github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/runc/libcontainer/stacktrace/frame.go (about) 1 package stacktrace 2 3 import ( 4 "path/filepath" 5 "runtime" 6 "strings" 7 ) 8 9 // NewFrame returns a new stack frame for the provided information 10 func NewFrame(pc uintptr, file string, line int) Frame { 11 fn := runtime.FuncForPC(pc) 12 if fn == nil { 13 return Frame{} 14 } 15 pack, name := parseFunctionName(fn.Name()) 16 return Frame{ 17 Line: line, 18 File: filepath.Base(file), 19 Package: pack, 20 Function: name, 21 } 22 } 23 24 func parseFunctionName(name string) (string, string) { 25 i := strings.LastIndex(name, ".") 26 if i == -1 { 27 return "", name 28 } 29 return name[:i], name[i+1:] 30 } 31 32 // Frame contains all the information for a stack frame within a go program 33 type Frame struct { 34 File string 35 Function string 36 Package string 37 Line int 38 }