func ParseStack()

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
}