Go プロセス スタックの非侵襲的なダンプ
実行中の Go プロセスは、その組み込みの機能を活用することで、コードを変更したり終了したりせずに分析できます。スタック ダンピング機能。
メソッド:
送信時プロセスへの SIGQUIT シグナル (たとえば、Windows では ctrl \ を使用、Linux では kill -SIGQUIT process_pid を使用)、定義されたシグナル ハンドラーがそれをインターセプトし、スタック トレース キャプチャ ルーチンを呼び出します。キャプチャされたトレースは標準出力に出力され、プロセスの goroutine スタックの詳細なスナップショットが提供されます。
コード例:
<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 中国語 Web サイトの他の関連記事を参照してください。