类似于问题:How to dump goroutine stacktraces?
我接手了一个go程序,但它相当复杂,我无法通过阅读代码手动跟踪代码流,因为某些方法已执行,我不知道为什么。
有没有办法打印出main.go运行后执行的所有方法?
我知道:https://golang.org/pkg/net/http/pprof/但是我能够看到只有goroutines运行,而不是我无法回溯/逆向工程的具体方法。
答案 0 :(得分:0)
当我不确定如何调用某个方法时,我发现最简单的方法是debug.PrintStack()
。如果滚动过快,请将其设为panic
。
我认为如果您打印所有执行的方法,信号会在噪音中丢失。
另一个有用的方法是编写一个单元测试,它只调用你感兴趣的代码的一部分。运行它并观察会发生什么。把一些打印声明放入。一旦你弄清楚发生了什么,在你的单元测试中添加一些检查(以使其成为真正的测试),并且你已经改进了代码。
进行单元测试(或任何入口点)后,您也可以使用delve
进入单元测试。
Michael Feather"有效地使用传统代码"非常好,它提供了许多策略来攻击遗留代码,并将其重构为善。
最后,我发现很难让Go变得非常困惑,所以如果我继承的复杂代码在Go中,我通常会很高兴: - )