in grpc/common/recoveryOpts.go [15:37]
func ParseStack(stack string) (string, string) {
lines := strings.Split(stack, "panic.go") // split the stack into before panic and after panic
trace := strings.Split(lines[1], "\n") // split trace into lines
// Example Input
// panic({0xac4000, 0xd00610})
// /usr/local/go1.19/src/runtime/panic.go:884 +0x212
// go.goms.io/aks/rp/mygreeterv3/server/internal/server.(*Server).SayHello (0x0?, {0xd0a960?, 0xc0007fa270?}, 0xc00073d1d0)
// /root/aks-rp/mygreeterv3/server/internal/server/api.go:34 +0x299
var file = ""
var linenum = ""
for _, line := range trace {
// file name and number of what caused panic
if strings.Contains(line, ".go:") {
parts := strings.Split(line, " ")
fileAndLine := strings.Split(parts[0], ":")
file = strings.TrimSpace(fileAndLine[0])
linenum = fileAndLine[1]
break
}
}
return file, linenum
}