비침해적으로 Go 프로세스 스택 덤프
실행 중인 Go 프로세스는 코드를 수정하거나 내장된 기능을 활용하여 종료하지 않고도 분석할 수 있습니다. 스택 덤핑 기능.
방법:
전송할 때 프로세스에 대한 SIGQUIT 신호(예: Windows에서 ctrl \ 사용 또는 Linux에서 kill -SIGQUIT process_pid 사용), 정의된 신호 처리기가 이를 가로채고 스택 추적 캡처 루틴을 호출합니다. 캡처된 추적은 표준 출력으로 인쇄되어 프로세스의 고루틴 스택에 대한 자세한 스냅샷을 제공합니다.
코드 예:
<code class="go">import ( "fmt" "os" "os/signal" "runtime" "syscall" ) func main() { sigChan := make(chan os.Signal) go func() { stacktrace := make([]byte, 8192) for _ = range sigChan { length := runtime.Stack(stacktrace, true) fmt.Println(string(stacktrace[:length])) } }() signal.Notify(sigChan, syscall.SIGQUIT) // ... Process Logic }</code>
위 내용은 코드 수정이나 종료 없이 Go 프로세스 스택을 덤프하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!