패닉의 스택 추적 검색 및 저장
Go의 패닉은 기본적으로 스택 추적을 표준 출력으로 출력하여 귀중한 디버깅 정보를 제공합니다. 하지만 Recover()를 사용하여 패닉에서 복구하면 오류 설명만 반환됩니다.
패닉 중에 생성된 스택 추적을 검색하고 저장하여 문제의 정확한 위치를 더 쉽게 식별할 수 있는 방법이 있나요?
런타임/디버그 패키지 사용
답은 런타임/디버그 패키지에 있습니다. 이 패키지는 패닉과 관련된 스택 추적에 액세스하고 저장하는 메커니즘을 제공합니다. 방법은 다음과 같습니다.
package main import ( "fmt" "runtime/debug" ) func main() { defer func() { if r := recover(); r != nil { fmt.Println("Panic detected:", r) stacktrace := debug.Stack() fmt.Println("Stacktrace:", string(stacktrace)) } }() // Trigger a panic var mySlice []int j := mySlice[0] // Index out of bounds panic fmt.Printf("Hello, playground %d", j) }
이 코드는 모든 패닉을 처리하는 지연된 함수를 정의합니다. 패닉이 발생하면 Recover() 함수가 오류를 캡처합니다. 또한 debug.Stack() 함수는 패닉과 관련된 스택 추적을 검색하고 이를 문자열 변수로 저장하는 데 사용됩니다. 마지막으로 디버깅 목적으로 오류와 스택 추적이 모두 콘솔에 인쇄됩니다.
이 코드를 실행하면 다음이 출력됩니다.
Panic detected: runtime error: index out of range Stacktrace: goroutine 1 [running]: main.main.func1() /tmp/sandbox773777618/main.go:11 +0x60 panic(0xf9e00, 0x2078e0) /usr/local/go/src/runtime/panic.go:502 +0x2c0 main.main() /tmp/sandbox773777618/main.go:17 +0x60
이 출력에서 스택 추적은 다음 행을 명확하게 표시합니다. 패닉을 일으킨 코드에서 단순한 오류 설명보다 더 중요한 디버깅 정보를 제공합니다.
위 내용은 더 자세한 디버깅을 위해 Go 패닉의 스택 추적을 어떻게 검색하고 저장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!