From 86a773674adb89c749240b06e3a6c9fa1ed6670e Mon Sep 17 00:00:00 2001 From: Andy Hsu Date: Tue, 11 Apr 2023 15:11:58 +0800 Subject: [PATCH] feat(task): print stack trace if panic --- pkg/task/task.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/task/task.go b/pkg/task/task.go index eb1e7b5d..f47eb747 100644 --- a/pkg/task/task.go +++ b/pkg/task/task.go @@ -3,6 +3,7 @@ package task import ( "context" + "runtime" "github.com/pkg/errors" log "github.com/sirupsen/logrus" @@ -63,11 +64,17 @@ func (t Task[K]) GetErrMsg() string { return t.Error.Error() } +func getCurrentGoroutineStack() string { + buf := make([]byte, 1<<16) + n := runtime.Stack(buf, false) + return string(buf[:n]) +} + func (t *Task[K]) run() { t.state = RUNNING defer func() { if err := recover(); err != nil { - log.Errorf("error [%+v] while run task [%s]", err, t.Name) + log.Errorf("error [%s] while run task [%s],stack trace:\n%s", err, t.Name, getCurrentGoroutineStack()) t.Error = errors.Errorf("panic: %+v", err) t.state = ERRORED }