Go编译器的SSA后端包括一个在编译阶段生成HTML调试输出的工具。这篇文章描述了如何打印函数和方法的SSA输出。让我们从一个包含函数、值方法和指针方法的示例程序开始:(n.vals,v)}func(nNumbers)Average()float64{sum:=0.0for_,num:=rangen.vals{sum+=float64(num)}returnsum/float64(len(n.vals))}funcmain(){varnumbersNumbersnumbers.Add(200)numbers.Add(43)numbers.Add(-6)fmt.Println(numbers.Average())}通过GOSSAFUNC环境变量控制SSA调试输出.该变量包含要转储的函数的名称。这不是函数的完全限定名称。对于上面的funcmain,函数名称是main而不是main.main。%envGOSSAFUNC=maingobuildruntimedumpedSSAto../../go/src/runtime/ssa.htmltdumpedSSAto./ssa.html在此示例中,GOSSAFUNC=main匹配main.main和名为runtime的文件。主功能。[1]这有点不走运,但实际上可能没什么大不了的,因为如果您要对代码进行性能调整,它就不会出现在funcmain的巨大意大利面条块中。您的代码更有可能在方法中,您可能已经看过这篇文章并寻找转储方法的SSA输出的能力。要为指针方法func(n*Numbers)Add打印SSA调试,等效函数名称为(*Numbers).Add:[2]%env"GOSSAFUNC=(*Numbers).Add"gobuildtdumpedSSAto./ssa.html要为值方法func(nNumbers)Average打印SSA调试,等效的函数名称是(*Numbers).Average,即使这是一个值方法:%env"GOSSAFUNC=(*Numbers).Average"gobuildtdumpedSSA到./ssa.html如果您没有从源代码构建Go,运行时包的路径可能是只读的,您可能会收到一条错误消息。请不要使用sudo来解决这个问题。注意shell引用。
