Golang panic 인쇄 스택 정보
3463 단어 Golang
golang은 Recover를 통해 error를 포획하고 panic의 창고를 로그에 출력해서 문제를 찾을 수 있습니다.
$ tree panictest
panictest
├── main.go
└── panic
└── panic.go
둘.코드
main.go
package main
import (
"fmt"
"os"
"./panic"
)
func test() {
defer func() {
if e := recover(); e != nil {
panic.PrintStack()
os.Exit(1)
}
}()
zero := 0
x := 3 / zero
fmt.Println("x=", x)
}
func main() {
test()
}
panic.go
package panic
import (
"fmt"
"runtime"
)
func PrintStack() {
var buf [4096]byte
n := runtime.Stack(buf[:], false)
fmt.Printf("==> %s
", string(buf[:n]))
}
셋.실행 결과
$ go run main.go
==> goroutine 1 [running]:
_/tmp/panictest/panic.PrintStack()
/tmp/panictest/panic/panic.go:10 +0x5b
main.test.func1()
/tmp/panictest/main.go:13 +0x44
panic(0x49c640, 0x525390)
/usr/local/go/src/runtime/panic.go:505 +0x229
main.test()
/tmp/panictest/main.go:19 +0x3e
main.main()
/tmp/panictest/main.go:24 +0x20
exit status 1
문제가
main.go:19
에 있는 x := 3 / zero
줄을 알 수 있다.fmt.Println
를 로그 출력 함수로 바꿀 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Golang 구현 대기열 및 스택대기열: 스택: github 주소:https://github.com/golibec/Lstruct.git 후속적으로 각종 데이터 구조와 주류 알고리즘을 지속적으로 보완할 것이다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.