在go中,有没有一种方法可以获得所有goroutine的堆栈跟踪以及“父”goroutine的堆栈跟踪(这里使用"parent“是指执行对go foo()的调用的goroutine,该goroutine启动了所讨论的goroutine)。这个问题的上下文是,我有一个连接泄漏,并注意到在awaitDone (在sql包中)上有许多goroutine被阻塞,这些goroutines是在创建连接的地方产生的。
发布于 2021-06-22 12:57:55
runtime.Stack()将为您提供运行时所知道的所有堆栈信息。
阅读您可以看到的输出,对于Goroutines,它们被设计为不包含其祖先的信息。
但是,在堆栈输出中,您确实可以访问创建goroutine的位置。从技术上讲,您可以将其与其他Goroutine的堆栈输出自动交叉匹配,以推导出部分和不准确的拓扑。
AFAIK,这是多少Golang IDE解决调试问题。除非Golang核心团队改变对Goroutine元数据的看法,否则我认为这是最好的选择。
发布于 2017-08-18 03:26:18
如果我理解您的要求,您可以使用运行时包打印/输出您想要的信息。
看看https://golang.org/pkg/runtime/#Caller和跳过参数。加上框架文档:https://golang.org/pkg/runtime/#Frames
这就是你要找的吗?
https://stackoverflow.com/questions/45743227
复制相似问题