2017-06-14 100 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?