如何打印在golang程序中执行的所有方法

时间:2018-03-22 19:58:54

标签: go profiling reverse-engineering

类似于问题:How to dump goroutine stacktraces?

我接手了一个go程序,但它相当复杂,我无法通过阅读代码手动跟踪代码流,因为某些方法已执行,我不知道为什么。

有没有办法打印出main.go运行后执行的所有方法?

我知道:https://golang.org/pkg/net/http/pprof/但是我能够看到只有goroutines运行,而不是我无法回溯/逆向工程的具体方法。

1 个答案:

答案 0 :(得分:0)

当我不确定如何调用某个方法时,我发现最简单的方法是debug.PrintStack()。如果滚动过快,请将其设为panic

我认为如果您打印所有执行的方法,信号会在噪音中丢失。

另一个有用的方法是编写一个单元测试,它只调用你感兴趣的代码的一部分。运行它并观察会发生什么。把一些打印声明放入。一旦你弄清楚发生了什么,在你的单元测试中添加一些检查(以使其成为真正的测试),并且你已经改进了代码。

进行单元测试(或任何入口点)后,您也可以使用delve进入单元测试。

Michael Feather"有效地使用传统代码"非常好,它提供了许多策略来攻击遗留代码,并将其重构为善。

最后,我发现很难让Go变得非常困惑,所以如果我继承的复杂代码在Go中,我通常会很高兴: - )