debug.Stack() []byte
debug.PrintStack()
# 스택 정보를 파악할 수 있다.
goroutine 1 [running]:
runtime/debug.Stack(0x275, 0x0, 0x0)
/usr/local/Cellar/go/1.10.3/libexec/src/runtime/debug/stack.go:24 +0xa7
runtime/debug.PrintStack()
/usr/local/Cellar/go/1.10.3/libexec/src/runtime/debug/stack.go:16 +0x22
main.makePanicAndRecover.func1()
/Users/ysoftman/workspace/test_code/golang/panic_recover/panic_recover.go:48 +0x3e1
panic(0x10a98c0, 0x113a400)
/usr/local/Cellar/go/1.10.3/libexec/src/runtime/panic.go:502 +0x229
main.makePanicAndRecover(0x1, 0x0)
/Users/ysoftman/workspace/test_code/golang/panic_recover/panic_recover.go:54 +0x194
main.main()
/Users/ysoftman/workspace/test_code/golang/panic_recover/panic_recover.go:17 +0xb7
runtime error: integer divide by zero
# 맨줄의 숫자는 고루틴에 부여되는 특정 이름(id)로 보인다.
# 다음과 같은 코드에서 첫번재, 두번째는 같은 goroutine id 로 표시되고, 나머지 go루틴 2개는 각각 다른 id 로 표시된다.
debug.PrintStack()
debug.PrintStack()
go func() {
debug.PrintStack()
}()
go func() {
debug.PrintStack()
}()
# GOTRACEBACK 의 레벨에 따라 스택 출력 내용이 달라진다. (go env 에선 안보임)
# GOTRACEBACK=none 모든 고루틴 스택 내용 출력 안함
# GOTRACEBACK=single 패닉 발생 고루린 스택만 출력
# GOTRACEBACK=all 현재돌고 있는 사용자 고루틴 모두 (default)
# GOTRACEBACK=system 시스템을 사용하는 고루틴 모두 출력
# GOTRACEBACK=crash 크래시 발생
# 실행)
# env GOTRACEBACK=all go run panic_recover.go
# 참고
# stack trace 정보 설명
# https://www.ardanlabs.com/blog/2015/01/stack-traces-in-go.html
# https://golang.org/pkg/runtime/
# https://dave.cheney.net/tag/gotraceback
comments:
댓글 쓰기