1
func main() {
timeout := time.NewTimer(n)
go longRunningFn()
<-timeout.C
}
是否有可能得到的longRunningFn
时main
超时堆栈跟踪?
func main() {
timeout := time.NewTimer(n)
go longRunningFn()
<-timeout.C
}
是否有可能得到的longRunningFn
时main
超时堆栈跟踪?
是的,你可以使用runtime.Stack打印所有够程的堆栈:
堆栈格式调用够程的堆栈跟踪到buf中,并返回写入buf中的字节数。如果全部为真,则堆栈格式会将当前goroutine的跟踪之后的所有其他goroutines的跟踪信息堆叠到buf中。
简单GoPlay这里:
https://play.golang.org/p/sB-ynAVwmU
它也像您可以通过在运行时库一起使用debug.PrintStack打印出一个具体的goroutine的堆栈。来自另一家S.O.的信贷。在这里回答:How to dump goroutine stacktraces?
如果'longRunningFn'仍在运行,它将在完整的堆栈跟踪中。你有什么尝试? – JimB