golang - 패닉 발생 시 stack trace 출력
아래 코드는 어떤 오픈 소스에서 본 것을 아주 약간 변경한 것이다.
보기 좋게 출력하기 위해 go-spew 라는 오픈 소스 라이브러리를 사용하였다.
import (
"fmt"
"runtime"
"github.com/davecgh/go-spew/spew"
)
func PrintPanicStack(extras ...interface{}) {
if x := recover(); x != nil {
fmt.Println("%v", x)
i := 0
funcName, file, line, ok := runtime.Caller(i)
for ok {
fmt.Println("PrintPanicStack. [func]: %s, [file]: %s, [line]: %d\n", runtime.FuncForPC(funcName).Name(), file, line)
i++
funcName, file, line, ok = runtime.Caller(i)
}
for k := range extras {
fmt.Println("EXRAS#%v DATA:%v\n", k, spew.Sdump(extras[k]))
}
}
}
func _handle() {
defer PrintPanicStack()
...
}
이 글은 2019-01-29에 작성되었습니다.