2017-06-14 53 views
1

考虑:堆栈跟踪够程时封闭函数结束

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

是否有可能得到的longRunningFnmain超时堆栈跟踪?

+0

如果'longRunningFn'仍在运行,它将在完整的堆栈跟踪中。你有什么尝试? – JimB

回答

1

是的,你可以使用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?