패닉 스택 추적 검색 및 저장
Go 프로그램에서 패닉이 발생하면 귀중한 디버깅 정보를 제공하는 스택 추적이 자동으로 인쇄됩니다. 표준 출력. 그러나 패닉에서 복구할 때 Recover()는 패닉의 원인을 나타내는 오류 문자열만 반환합니다.
이는 추가 분석을 위해 인쇄된 스택 추적을 저장할 수 있는지에 대한 의문을 제기합니다.
해결책: 런타임/디버그 패키지 활용
이 문제를 해결하기 위해 다음을 활용할 수 있습니다. 런타임/디버그 패키지. Recover()를 호출하는 지연된 함수에 코드를 래핑하면 debug.Stack()을 사용하여 패닉을 캡처하고 스택 추적에 액세스할 수 있습니다.
아래는 이 접근 방식을 보여주는 예제 코드 조각입니다.
package main import ( "fmt" "runtime/debug" ) func main() { defer func() { if r := recover(); r != nil { fmt.Println("stacktrace from panic: \n" + string(debug.Stack())) } }() var mySlice []int j := mySlice[0] fmt.Printf("Hello, playground %d", j) }
이 코드를 실행하면 패닉 발생 시 다음 스택 추적이 출력됩니다.
stacktrace from panic: goroutine 1 [running]: runtime/debug.Stack(0x1042ff18, 0x98b2, 0xf0ba0, 0x17d048) /usr/local/go/src/runtime/debug/stack.go:24 +0xc0 main.main.func1() /tmp/sandbox973508195/main.go:11 +0x60 panic(0xf0ba0, 0x17d048) /usr/local/go/src/runtime/panic.go:502 +0x2c0 main.main() /tmp/sandbox973508195/main.go:16 +0x60
이 스택 추적은 다음을 제공합니다. 패닉으로 이어지는 함수 호출 체인에 대한 자세한 보기를 통해 오류의 원인을 더 쉽게 찾아낼 수 있습니다.
위 내용은 Go에서 패닉의 스택 추적을 어떻게 캡처하고 저장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!