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  }