类似于问题:How to dump goroutine stacktraces?
我接手了一个 go 程序,但它相当复杂,我无法通过阅读代码来手动跟踪代码流,因为执行了一些方法,我不知道为什么。
有没有办法打印出在 main.go 运行后执行的所有方法?
我知道:https://golang.org/pkg/net/http/pprof/但我只能看到 goroutines 运行,而不是我无法回溯/逆向工程的具体方法。
最佳答案
当我不确定一个方法是如何被调用时,我发现最简单的方法是在它的开头进行 debug.PrintStack()
。如果它滚动得太快,请让它 panic
。
我想如果你打印所有执行的方法,信号就会在噪音中消失。
另一个有用的方法是编写一个单元测试,它只调用您感兴趣的代码的一部分。运行它并观察会发生什么。放入一些打印语句。一旦你弄清楚发生了什么,向你的单元测试添加一些检查(使其成为真正的测试),你就已经改进了代码。
完成单元测试(或任何入口点)后,您还可以使用 delve
进入它。
Michael Feather 的“Working Effectively With Legacy Code”非常好,它给出了很多策略来攻击遗留代码,并将其重构为好的。
最后,我发现很难让 Go 真正令人困惑,所以如果我继承的复杂代码在 Go 中,我通常会非常高兴 :-)
关于go - 如何打印golang程序中执行的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49437415/