> 백엔드 개발 > Golang > 더 자세한 디버깅을 위해 Go 패닉의 스택 추적을 어떻게 검색하고 저장할 수 있나요?

더 자세한 디버깅을 위해 Go 패닉의 스택 추적을 어떻게 검색하고 저장할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-13 02:23:02
원래의
927명이 탐색했습니다.

How can I retrieve and store the stacktrace of a Go panic for more detailed debugging?

패닉의 스택 추적 검색 및 저장

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿