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