封闭功能结束时goroutine的堆栈跟踪

时间:2017-06-14 18:25:10

标签: go goroutine

假设:

func main() {
    timeout := time.NewTimer(n)
    go longRunningFn()
    <-timeout.C
}

longRunningFn次超时时,是否有可能获得main的堆栈跟踪?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用runtime.Stack打印所有goroutines的堆栈:

  

Stack将调用goroutine的堆栈跟踪格式化为buf,并返回写入buf的字节数。如果全部为真,则在当前goroutine的跟踪之后,Stack格式化所有其他goroutine的跟踪到buf。

简单的GoPlay:
https://play.golang.org/p/sB-ynAVwmU

看起来你可以通过将debug.PrintStack与运行时库结合使用来打印出特定goroutine的堆栈。来自另一个S.O.的信用在这里回答:How to dump goroutine stacktraces?