diff --git a/logger/logger.go b/logger/logger.go index bf7b21e..3773bfc 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -127,3 +127,33 @@ func ErrorWithCallStack(err error) error { frames: frames, } } + +func ErrorSmallStack() { + buf := make([]byte, 1024) + n := runtime.Stack(buf, false) + if n < len(buf) { + buf = buf[:n] + } + + Error(string(buf)) +} + +func RecoverAndErrorSmallStack(r any) any { + if r != nil { + pc := make([]uintptr, 10) + runtime.Callers(1, pc) + curframes := runtime.CallersFrames(pc) + var out []string + for { + frame, more := curframes.Next() + out = append(out, fmt.Sprintf("%s\n\t%s:%d", frame.Function, frame.File, frame.Line)) + if !more { + break + } + } + + Error(strings.Join(out, "\n")) + } + + return r +}